我一直在尝试检查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");
}
}
}
答案 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);