簡體   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