[英]C# Putting an Image into an ImageList changes the color of the Image slightly?
我不确定这是否是故意的,但是我已经做了一些实验,很显然,当您将Image放入ImageList时,Image的颜色会略有变化。
例如,我有一个图像(144x144),颜色为ARGB(255、247、215、193)。 将其放入ImageList中,然后在PictureBox中显示图像后,颜色已更改为ARGB(255、239、214、198)。 几乎没有什么明显的区别,但是仍然有区别。
是否有这种情况发生的原因,或者是ImageLists的某种错误? 有没有一种方法可以避免在使用ImageLists显示图像时出现这种颜色偏移?
这是一些显示此行为的示例代码:
string filePath = directoryPath + "/Images/Test/Test.png";
Bitmap TestImage1 = (Bitmap)Image.FromFile(filePath);
MessageBox.Show(TestImage1.GetPixel(0, 0).ToString());
ImageList IL = new ImageList();
IL.ImageSize = new Size(144, 144);
IL.Images.Add(Image.FromFile(filePath));
Bitmap TestImage2 = (Bitmap)IL.Images[0];
MessageBox.Show(TestImage2.GetPixel(0, 0).ToString());
第一个消息框显示“颜色[A = 255,R = 247,G = 215,B = 193]”。 第二个消息框显示“颜色[A = 255,R = 239,G = 214,B = 198]”。
这是一个非常轻微的色差示例: https : //i.stack.imgur.com/m7beR.png
您的代码有几行内容,这使得很难准确确定正在发生的事情。
为什么IL.ImageSize = new Size(144, 144);
在那里? 这对您的形象有什么影响? 我拿出来了
接下来,当您执行IL.Images.Add(Image.FromFile(filePath));
时,您将重新加载图像IL.Images.Add(Image.FromFile(filePath));
。 这样做IL.Images.Add(TestImage1);
会更有启发性IL.Images.Add(TestImage1);
看看参考是否改变。
如果运行此代码:
Bitmap TestImage1 = (Bitmap)Image.FromFile(filePath);
Console.WriteLine(TestImage1.GetPixel(0, 0).ToString());
ImageList IL = new ImageList();
IL.Images.Add(TestImage1);
Bitmap TestImage2 = (Bitmap)IL.Images[0];
Console.WriteLine(TestImage2.GetPixel(0, 0).ToString());
Console.WriteLine(TestImage1.GetPixel(0, 0).ToString());
Console.WriteLine(TestImage1.Equals(TestImage2));
然后,您将获得类似以下内容的信息:
Color [A=255, R=249, G=249, B=249] Color [A=255, R=255, G=251, B=240] Color [A=255, R=249, G=249, B=249] False
这是在告诉您,将图像添加到图像列表时,它是在创建新图像。 引用不同。
如果查看ImageList
的源代码,您将看到各种各样的代码,如下所示:
bitmap1 = new Bitmap((Image) bitmap2, this.ImageSize);
if (ownsBitmap)
bitmap2.Dispose();
ownsBitmap = true;
它进行了大量的图像管理并在各处创建副本。 因此,仅假设ImageList
从未保留对原始图像的引用。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.