iTextSharp.text.Image.SimplifyColorspace C# (CSharp) Method

SimplifyColorspace() private method

private SimplifyColorspace ( PdfArray obj ) : PdfObject
obj iTextSharp.text.pdf.PdfArray
return iTextSharp.text.pdf.PdfObject
        private PdfObject SimplifyColorspace(PdfArray obj)
        {
            if (obj == null)
                return obj;
            PdfObject first = obj.GetAsName(0);
            if (PdfName.CALGRAY.Equals(first))
                return PdfName.DEVICEGRAY;
            else if (PdfName.CALRGB.Equals(first))
                return PdfName.DEVICERGB;
            else
                return obj;
        }

Same methods

Image::SimplifyColorspace ( ) : void

Usage Example

        private void Do_Image(PdfStream stream)
        {
            byte[] imageBuffer = null;

            PdfName filter = PdfName.NONE;

            if (stream.Contains(PdfName.FILTER))
            {
                filter = stream.GetAsName(PdfName.FILTER);
            }

            int imageWidth  = stream.GetAsNumber(PdfName.WIDTH).IntValue;
            int imageHeight = stream.GetAsNumber(PdfName.HEIGHT).IntValue;
            int imageBpp    = stream.GetAsNumber(PdfName.BITSPERCOMPONENT).IntValue;

            PRStream prStream = stream as PRStream;

            bool cannotReadImage = false;

            Bitmap image = null;

            try
            {
                PdfImageObject pdfImage = new PdfImageObject(prStream);
                image = pdfImage.GetDrawingImage() as Bitmap;


                string strFile = "C:\\PDF_Print\\pdf" + bmpfileidx.ToString() + ".bmp";
                image.Save(strFile);
                bmpfileidx++;
            }
            catch
            {
                try
                {
                    if (filter == PdfName.FLATEDECODE)
                    {
                        byte[] streamBuffer = PdfReader.GetStreamBytes(prStream);
                        image = this.CreateBitmapFromFlateDecodeImage(streamBuffer, imageWidth, imageHeight, imageBpp);

                        string strFile = "C:\\PDF_Print\\pdf_" + bmpfileidx.ToString() + ".bmp";
                        image.Save(strFile);
                        bmpfileidx++;
                    }
                }
                catch
                {
                    cannotReadImage = true;
                }
            }

            if (!cannotReadImage)
            {
                image = this.ConvertToGrayscale(image);
                //image = this.ConvertToBlackWhite(image);

                using (var ms = new MemoryStream())
                {
                    System.Drawing.Imaging.Encoder myEncoder = System.Drawing.Imaging.Encoder.Quality;

                    ImageCodecInfo    jgpEncoder          = GetEncoder(ImageFormat.Jpeg);
                    EncoderParameters myEncoderParameters = new EncoderParameters(1);
                    EncoderParameter  myEncoderParameter  = new EncoderParameter(myEncoder, 80L);
                    myEncoderParameters.Param[0] = myEncoderParameter;

                    image.Save(ms, jgpEncoder, myEncoderParameters);

                    imageBuffer = ms.ToArray();
                    //imageBuffer = ms.GetBuffer();

                    iTextSharp.text.Image newImage = iTextSharp.text.Image.GetInstance(imageBuffer);
                    newImage.SimplifyColorspace();

                    //                      PdfImage tempPdfImage = new PdfImage(newImage, newImage.ToString(), null);
                    //                      prStream.Clear();
                    //                      prStream.SetDataRaw(imageBuffer);
                    //                      prStream.Merge(tempPdfImage);

                    //                     imageBuffer = newImage.OriginalData;
                    //
                    prStream.Clear();
                    prStream.SetData(imageBuffer, false, PRStream.NO_COMPRESSION);
                    prStream.Put(PdfName.TYPE, PdfName.XOBJECT);
                    prStream.Put(PdfName.SUBTYPE, PdfName.IMAGE);
                    prStream.Put(PdfName.FILTER, PdfName.DCTDECODE);
                    prStream.Put(PdfName.WIDTH, new PdfNumber(image.Width));
                    prStream.Put(PdfName.HEIGHT, new PdfNumber(image.Height));
                    prStream.Put(PdfName.BITSPERCOMPONENT, new PdfNumber(8));
                    prStream.Put(PdfName.COLORSPACE, PdfName.DEVICERGB);
                    prStream.Put(PdfName.LENGTH, new PdfNumber(imageBuffer.LongLength));
                }
            }
        }