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