C#Image另存为CMYK

时间:2015-06-18 17:44:52

标签: c# image cmyk

请参阅下面的代码。我保存了一张图片。我的输入图像颜色模式是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);
    

1 个答案:

答案 0 :(得分:2)

将图像转换为位图以便您可以操作它的行为

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

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

回应你的评论:

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

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

  3. 我不知道你在做什么,应该改变图像的宽高比。

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