c# 比较两个picturebox 显示的图片是否相同
我有两个picturebox容器,它们的中的图片都是:pb11.Image=imageList1.Images[2];pb12.Image=imageList1.Imag...
我有两个picturebox容器,它们的中的图片都是:
pb11.Image = imageList1.Images[2];
pb12.Image = imageList1.Images[2];
然后有个比较:
if (pb11.Image ==pb12.Image )
{
MessageBox.Show("相等");
return;
}
可是程序运行时却根本没有进入IF语句执行,这是为什么呢? 展开
pb11.Image = imageList1.Images[2];
pb12.Image = imageList1.Images[2];
然后有个比较:
if (pb11.Image ==pb12.Image )
{
MessageBox.Show("相等");
return;
}
可是程序运行时却根本没有进入IF语句执行,这是为什么呢? 展开
展开全部
List<string> list1 = new List<string>();
List<string> list2 = new List<string>();
if (list1 == list2)
Console.WriteLine(true);
else
Console.WriteLine(false);
参看这个例子
输出是false
你那样比较两个对象,似乎不行吧
我重新写了一个,利用内存流
你可以参考
private bool Same(Image image1, Image image2)
{
MemoryStream ms1 = new MemoryStream();
MemoryStream ms2 = new MemoryStream();
image1.Save(ms1, System.Drawing.Imaging.ImageFormat.Bmp);
image2.Save(ms2, System.Drawing.Imaging.ImageFormat.Bmp);
byte[] im1 = ms1.GetBuffer();
byte[] im2 = ms2.GetBuffer();
if (im1.Length != im2.Length)
return false;
else
{
for (int i = 0; i < im1.Length; i++)
if (im1[i] != im2[i])
return false;
}
return true;
}
调用
private void button2_Click(object sender, EventArgs e)
{
if (Same(pictureBox1.Image, pictureBox2.Image))
MessageBox.Show("true");
else
MessageBox.Show("false");
}
List<string> list2 = new List<string>();
if (list1 == list2)
Console.WriteLine(true);
else
Console.WriteLine(false);
参看这个例子
输出是false
你那样比较两个对象,似乎不行吧
我重新写了一个,利用内存流
你可以参考
private bool Same(Image image1, Image image2)
{
MemoryStream ms1 = new MemoryStream();
MemoryStream ms2 = new MemoryStream();
image1.Save(ms1, System.Drawing.Imaging.ImageFormat.Bmp);
image2.Save(ms2, System.Drawing.Imaging.ImageFormat.Bmp);
byte[] im1 = ms1.GetBuffer();
byte[] im2 = ms2.GetBuffer();
if (im1.Length != im2.Length)
return false;
else
{
for (int i = 0; i < im1.Length; i++)
if (im1[i] != im2[i])
return false;
}
return true;
}
调用
private void button2_Click(object sender, EventArgs e)
{
if (Same(pictureBox1.Image, pictureBox2.Image))
MessageBox.Show("true");
else
MessageBox.Show("false");
}
展开全部
对于引用类型变量来说,==比较只是比较引用对象是否相同。
就比如string类型,如果你在Java中写:
String s1="Sample";
String s2="Sample";
if(s1==s2)
{
System.out.println("s1=s2");
}
结果是没有输出s1=s2。因为此时只是比较引用的实例String是否相同。s1,s2是两个不同的实例,比较s1==s2会返回false。
如果要进行引用类的有意义的实际比较,你必须重写某个类的Equals()方法或者重载==运算符。
不知道.NET是否有提供Image的实际Equals比较,估计是没有的。
就比如string类型,如果你在Java中写:
String s1="Sample";
String s2="Sample";
if(s1==s2)
{
System.out.println("s1=s2");
}
结果是没有输出s1=s2。因为此时只是比较引用的实例String是否相同。s1,s2是两个不同的实例,比较s1==s2会返回false。
如果要进行引用类的有意义的实际比较,你必须重写某个类的Equals()方法或者重载==运算符。
不知道.NET是否有提供Image的实际Equals比较,估计是没有的。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
string.compare(pb11.image,pb12.image)比较
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
你这样比较肯定不行的,==在c#里被重写了,效果就是java里的Equals()。这个Equals只看对象引用是否相同。
所以你需要重写c#的Equals();
public override bool Equals(object o)
{
//这里写比较2个对象是否具体相等。
}
但是,如何比较2个图像相等?没见过。。。
这里给你个思路吧,把2个图像都读入文件流,转成2进制数组,再比较。。
所以你需要重写c#的Equals();
public override bool Equals(object o)
{
//这里写比较2个对象是否具体相等。
}
但是,如何比较2个图像相等?没见过。。。
这里给你个思路吧,把2个图像都读入文件流,转成2进制数组,再比较。。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询