2017-03-19 29 views
0

我一直在试图检查PictureBox是否具有特定图像。我使用Properties.Resources.TheImage设置了PictureBox的图像。根据使用ResX资源设置的图像查找图片框

使用下面的代码在PictureBox控件中找不到图像。我一直在努力使这个工作:

foreach (Control X in Controls) 
{ 
    if (X is PictureBox) 
    { 
     if (((PictureBox)X).Image == Properties.Resources.TheImage) 
     { 
      MessageBox.Show("found the image"); 
     } 
    } 
} 
+0

问题是什么? – Sajeetharan

回答

0

A Properties.Resources.XxxxYyy属性将永远返回一个新的位图,每次使用它。一般来说,这是一个不断膨胀的内存使用情况。您必须将其存储在窗体构造函数中的变量中,现在可以对其进行比较。

实施例:

Bitmap _icopalABitmap = Properties.Resources.IcopalA; 
Bitmap _icopalBBitmap = Properties.Resources.IcopalB; 

则u检查每个它使用它的时间为特定图像

0

Properties.Resources.SomeImage返回不同的对象引用。你凸轮简单地测试了:

var b = object.ReferenceEquals(Properties.Resources.SomeImage, 
           Properties.Resources.SomeImage); 

要检查图像的平等,你可以用这个方法:

public bool AreImagesEqual(Image img1, Image img2) 
{ 
    ImageConverter converter = new ImageConverter(); 
    byte[] bytes1 = (byte[])converter.ConvertTo(img1, typeof(byte[])); 
    byte[] bytes2 = (byte[])converter.ConvertTo(img2, typeof(byte[])); 
    return Enumerable.SequenceEqual(bytes1, bytes2); 
} 

例如:

var b = AreImagesEqual(Properties.Resources.SomeImage, 
         Properties.Resources.SomeImage); 
+0

看来这篇文章回答你的问题。如果您对答案有任何疑问,或者您觉得有用,请告诉我 –