【问题标题】:C# Image Save as CMYKC# 图像另存为 CMYK
【发布时间】:2015-06-18 17:44:51
【问题描述】:

请在下面查看我的代码。我正在保存图像。我的输入图像颜色模式是 CMYK,但是一旦我保存,它就变成了 RGB 并休息。我只想做以下事情:

  1. 我只想让它保持 CMYK 颜色模式。
  2. 我只想保持相同的输入质量。
  3. 我只想保持与输入相同的宽度和高度。

        Bitmap bmp = new Bitmap(Image.FromFile(@"D:\input.jpg"));            
        Graphics gr = Graphics.FromImage(bmp);
    
        using (Font myFont = new Font("Arial", 42))
        {
            gr.DrawString("Hello!", myFont, Brushes.Green, new Point(2, 2));
            gr.DrawString(textBox1.Text, myFont, Brushes.Green, new Point(700, 750));
        }
        ImageCodecInfo jgpEncoder = GetEncoder(ImageFormat.Jpeg);
        System.Drawing.Imaging.Encoder myEncoder = System.Drawing.Imaging.Encoder.Quality;
        EncoderParameters myEncoderParameters = new EncoderParameters(1);
    
        EncoderParameter myEncoderParameter = new EncoderParameter(myEncoder, 100L);
        myEncoderParameters.Param[0] = myEncoderParameter;
        bmp.Save(@"D:\test.jpg", jgpEncoder, myEncoderParameters);
    

【问题讨论】:

标签: c# image cmyk


【解决方案1】:

将图像转换为位图以便您可以对其进行操作的行为

Bitmap bmp = new Bitmap(Image.FromFile(@"D:\input.jpg"));

在内部进行转换(位图中的调色板是 RGB)。在保存回文件之前,您必须使用转换算法(ArgentFire 建议的链接中的一种算法,或其他算法)。

回应您的评论:

  1. 不会发生。要执行所需的图像操作,您必须使用位图,它在内部进行转换。 (在 .Net 中,位图是图像的标准内存表示)

  2. 当您重新编码位图以保存时,图像质量将由 jpg 编码器确定。 Jpeg 使用有损压缩,因此保持原始图像质量值得怀疑。

  3. 我看不出你在哪里做任何应该改变图像纵横比的事情。

使用 tiff 之类的无损图像格式可能会更好。从 tiff 开始,转换为 Bitmap 进行操作,编码回 tiff 进行保存。在图像质量方面都是无损的。

【讨论】:

  • 感谢凯文,请参考更新后的问题并提供您的支持。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2023-03-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-07-06
  • 2020-07-03
  • 1970-01-01
相关资源
最近更新 更多