为什么我正在保存的ARGB组件和我从保存的文件中检索的组件之间存在差异?

时间:2017-06-19 12:25:21

标签: c# bitmap save argb

[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?

在此先感谢您的答案,我很确定这是基本的(至少可以说),但它确实困扰我。

1 个答案:

答案 0 :(得分:1)

JPEG使用有损压缩算法。如果在原始图像中设置单个像素,则压缩图像中的相应像素很可能不再具有完全相同的颜色值。

要保留准确的颜色值,请使用无损压缩格式(如PNG)或使用未压缩的位图。