iTextSharp.text.pdf.codec.PngImage.GetColorspace C# (CSharp) Метод

GetColorspace() приватный Метод

private GetColorspace ( ) : PdfObject
Результат iTextSharp.text.pdf.PdfObject
        PdfObject GetColorspace()
        {
            if (icc_profile != null) {
                if ((colorType & 2) == 0)
                    return PdfName.DEVICEGRAY;
                else
                    return PdfName.DEVICERGB;
            }
            if (gamma == 1f && !hasCHRM) {
                if ((colorType & 2) == 0)
                    return PdfName.DEVICEGRAY;
                else
                    return PdfName.DEVICERGB;
            }
            else {
                PdfArray array = new PdfArray();
                PdfDictionary dic = new PdfDictionary();
                if ((colorType & 2) == 0) {
                    if (gamma == 1f)
                        return PdfName.DEVICEGRAY;
                    array.Add(PdfName.CALGRAY);
                    dic.Put(PdfName.GAMMA, new PdfNumber(gamma));
                    dic.Put(PdfName.WHITEPOINT, new PdfLiteral("[1 1 1]"));
                    array.Add(dic);
                }
                else {
                    PdfObject wp = new PdfLiteral("[1 1 1]");
                    array.Add(PdfName.CALRGB);
                    if (gamma != 1f) {
                        PdfArray gm = new PdfArray();
                        PdfNumber n = new PdfNumber(gamma);
                        gm.Add(n);
                        gm.Add(n);
                        gm.Add(n);
                        dic.Put(PdfName.GAMMA, gm);
                    }
                    if (hasCHRM) {
                        float z = yW*((xG-xB)*yR-(xR-xB)*yG+(xR-xG)*yB);
                        float YA = yR*((xG-xB)*yW-(xW-xB)*yG+(xW-xG)*yB)/z;
                        float XA = YA*xR/yR;
                        float ZA = YA*((1-xR)/yR-1);
                        float YB = -yG*((xR-xB)*yW-(xW-xB)*yR+(xW-xR)*yB)/z;
                        float XB = YB*xG/yG;
                        float ZB = YB*((1-xG)/yG-1);
                        float YC = yB*((xR-xG)*yW-(xW-xG)*yW+(xW-xR)*yG)/z;
                        float XC = YC*xB/yB;
                        float ZC = YC*((1-xB)/yB-1);
                        float XW = XA+XB+XC;
                        float YW = 1;//YA+YB+YC;
                        float ZW = ZA+ZB+ZC;
                        PdfArray wpa = new PdfArray();
                        wpa.Add(new PdfNumber(XW));
                        wpa.Add(new PdfNumber(YW));
                        wpa.Add(new PdfNumber(ZW));
                        wp = wpa;
                        PdfArray matrix = new PdfArray();
                        matrix.Add(new PdfNumber(XA));
                        matrix.Add(new PdfNumber(YA));
                        matrix.Add(new PdfNumber(ZA));
                        matrix.Add(new PdfNumber(XB));
                        matrix.Add(new PdfNumber(YB));
                        matrix.Add(new PdfNumber(ZB));
                        matrix.Add(new PdfNumber(XC));
                        matrix.Add(new PdfNumber(YC));
                        matrix.Add(new PdfNumber(ZC));
                        dic.Put(PdfName.MATRIX, matrix);
                    }
                    dic.Put(PdfName.WHITEPOINT, wp);
                    array.Add(dic);
                }
                return array;
            }
        }