请参阅下面的代码。我保存了一张图片。我的输入图像颜色模式是CMYK,但是一旦我保存,它就会变成RGB并休息。我只想做以下事情:
我只想保持与输入相同的宽度和高度。
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);
答案 0 :(得分:2)
将图像转换为位图以便您可以操作它的行为
Bitmap bmp = new Bitmap(Image.FromFile(@"D:\input.jpg"));
内部转换(位图中的颜色调色板是RGB)。在保存回文件之前,您必须使用转换算法(ArgentFire建议的链接中的一个,或其他)。
回应你的评论:
不会发生。要执行所需图像的操作,您必须使用Bitmap,它在内部进行转换。 (在.Net中,Bitmap是图像的标准内存表示)
当您重新编码位图以进行保存时,图像质量将由jpg编码器决定。 Jpeg使用有损压缩,因此保持原始图像质量是值得怀疑的。
我不知道你在做什么,应该改变图像的宽高比。
使用像tiff这样的无损图像格式可能会更好。从tiff开始,转换为Bitmap进行操作,编码回tiff进行保存。在图像质量方面都是无损的。