[Offtopic]请原谅我,如果我不够准确,这是我的第一个问题,我也是编程的新手。
[问题]我想用Bitmap.SetPixel将位图(照片,jpg文件)的单个像素的ARGB组件更改为精确值,并使用Bitmap.Save将其保存到新文件。不幸的是它没有用。当我重新打开文件时,我想要更改的像素(0,0)的ARGB值略有不同。为什么会这样?是否可以创建一个具有我想要的某个像素的ARGB组件的文件?
这是我的代码:
Bitmap originalMap = new Bitmap("image.jpg");
Color current = originalMap.GetPixel(0, 0);
//This one shows the original ARGB values
Console.WriteLine(current);
originalMap.SetPixel(0, 0, Color.FromArgb(255, 100, 100, 100));
originalMap.Save("new.jpg");
//This one shows the result that I want, but the bitmap is not re-opened
Console.WriteLine(originalMap.GetPixel(0, 0));
Bitmap openTheNewFile = new Bitmap("new.jpg");
//The actual result after I open the saved file, A=255, R=108, G=113, B=117
Console.WriteLine(openTheNewFile.GetPixel(0, 0));
为什么它是108,113和117而不是100,100,100?
在此先感谢您的答案,我很确定这是基本的(至少可以说),但它确实困扰我。
答案 0 :(得分:1)
JPEG使用有损压缩算法。如果在原始图像中设置单个像素,则压缩图像中的相应像素很可能不再具有完全相同的颜色值。
要保留准确的颜色值,请使用无损压缩格式(如PNG)或使用未压缩的位图。