根据使用ResX资源设置的图像查找PictureBox

时间:2017-03-19 03:39:07

标签: c# .net winforms picturebox embedded-resource

我一直在尝试检查PictureBox是否有特定图像。我使用PictureBox设置了Properties.Resources.TheImage的图像。

使用以下代码,无法在任何PictureBox控件中找到图像。我一直试图让这个工作:

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

2 个答案:

答案 0 :(得分:0)

Properties.Resources.XxxxYyy属性将在每次使用时始终返回新的位图。通常是令人讨厌的内存使用膨胀的来源。你必须将它存储在表单构造函数的变量中,现在你可以比较它。

示例:

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

然后你检查特定图像

答案 1 :(得分: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);