繁体   English   中英

C#将图像放入ImageList会稍微改变图像的颜色?

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM