C# 颜色在校正后的CMYK图像中出现褪色

C# 颜色在校正后的CMYK图像中出现褪色,c#,.net,pdf,compression,itextsharp,C#,.net,Pdf,Compression,Itextsharp,我正在压缩包含许多图像的pdf文件。下面是我在浏览PDF压缩时得到的代码。它适用于RBG格式的图像,但在CMYK格式的情况下,图像显示为反转颜色(作为负片)。不知何故,我能够转换反转的颜色,但图像颜色变暗了 请建议我应该如何进行。提前谢谢 { PdfReader.unethicalreading = true; string pdfFile = @"C:\TestPdf.pdf"; PdfReader reader = new PdfReader(pdfFile);

我正在压缩包含许多图像的pdf文件。下面是我在浏览PDF压缩时得到的代码。它适用于RBG格式的图像,但在CMYK格式的情况下,图像显示为反转颜色(作为负片)。不知何故,我能够转换反转的颜色,但图像颜色变暗了

请建议我应该如何进行。提前谢谢

{
    PdfReader.unethicalreading = true;
    string pdfFile = @"C:\TestPdf.pdf";
    PdfReader reader = new PdfReader(pdfFile);
    long quality = 50L;
    int n = reader.XrefSize;
    for (int i = 0; i < n; i++)
    {
        PdfObject obj = reader.GetPdfObject(i);
        if (obj == null || !obj.IsStream()) { continue; }
        PdfDictionary dict = (PdfDictionary)PdfReader.GetPdfObject(obj);
        PdfObject pdfcolorspace = dict.Get(PdfName.COLORSPACE);
        PdfName subType = (PdfName)PdfReader.GetPdfObject(dict.Get(PdfName.SUBTYPE));
        if (!PdfName.IMAGE.Equals(subType)) { continue; }
        PRStream stream = (PRStream)obj;
        try
        {
            PdfImageObject image = new PdfImageObject(stream);
            PdfName filter = (PdfName)image.Get(PdfName.FILTER);
            if ( PdfName.JBIG2DECODE.Equals(filter) || PdfName.JPXDECODE.Equals(filter) || PdfName.CCITTFAXDECODE.Equals(filter) || PdfName.FLATEDECODE.Equals(filter)) 
            continue;
            System.Drawing.Image img = image.GetDrawingImage();
            if (img == null) continue;
            var ll = image.GetImageBytesType();
            int width = img.Width;
            int height = img.Height;
            using (System.Drawing.Bitmap dotnetImg = new System.Drawing.Bitmap(img))
            {
                System.Drawing.Imaging.ImageCodecInfo codec = System.Drawing.Imaging.ImageCodecInfo.GetImageEncoders()[1];
                System.Drawing.Imaging.EncoderParameters eParams = new System.Drawing.Imaging.EncoderParameters(1);
                eParams.Param[0] = new System.Drawing.Imaging.EncoderParameter( System.Drawing.Imaging.Encoder.Quality, quality);
                using (MemoryStream msImg = new MemoryStream())
                {
                    dotnetImg.Save(msImg, codec, eParams);
                    msImg.Position = 0;
                    stream.Clear();
                    if (pdfcolorspace == PdfName.DEVICECMYK)
                    {
                        img.Save(msImg, ImageFormat.Jpeg);
                        stream.Put(PdfName.COLORSPACE, PdfName.DEVICECMYK);
                    }
                    else
                    {
                        stream.Put(PdfName.COLORSPACE, PdfName.DEVICERGB);
                    }
                    stream.SetData( msImg.ToArray(), true, PdfStream.BEST_COMPRESSION);
                    stream.Put(PdfName.TYPE, PdfName.XOBJECT);
                    stream.Put(PdfName.SUBTYPE, PdfName.IMAGE);
                    stream.Put(PdfName.FILTER, PdfName.DCTDECODE);
                    stream.Put(PdfName.WIDTH, new PdfNumber(width));
                    stream.Put(PdfName.HEIGHT, new PdfNumber(height));
                    stream.Put(PdfName.BITSPERCOMPONENT, new PdfNumber(8));
                }
            }
        }
        catch (Exception ex)
        {
        }
        finally
        {
            reader.RemoveUnusedObjects();
        }
    }

    PdfStamper stamper = new PdfStamper(reader, new FileStream(@"C:\Compress.pdf", FileMode.Create), PdfWriter.VERSION_1_5);
    stamper.FormFlattening = false;
    stamper.SetFullCompression();
    stamper.Close();
    reader.Close();
}
{
PdfReader.unethicalreading=true;
字符串pdfFile=@“C:\TestPdf.pdf”;
PDF阅读器=新的PDF阅读器(pdfFile);
长质量=50L;
int n=reader.XrefSize;
对于(int i=0;i
我确实添加了下面的代码,这在某种程度上是可行的,但pdf大小急剧增加。如果没有此选项,图像颜色将出现反转。保存(msImg,ImageFormat.Jpeg);stream.Put(PdfName.COLORSPACE,PdfName.DEVICECMYK);反转是将四色(CMYK)图像处理为三色(RGB)。将CMYK图像视为仅CMY意味着您缺少黑色通道。不过,听起来你已经搞定了那个部分。“褪色”的外观可能与颜色空间转换有关。CMYK和RGB之间没有1:1的颜色映射,所以视觉上看起来会有所不同。简单的答案是“不要转换颜色空间”。你说“pdf大小急剧增加”。这是和原来的PDF还是有反转颜色的PDF相比?谢谢Chris。PDF大小几乎与原始PDF相同。但是我想压缩这个文件,我无法理解。你能帮我解决这个问题吗。