【发布时间】:2014-01-28 04:19:26
【问题描述】:
private void button1_Click(object sender, EventArgs e)
{
Bitmap im1 = new Bitmap(@"C:\Users\user\Downloads\CaptchaCollection\1.png");
Bitmap im2 = new Bitmap(@"C:\Users\user\Downloads\CaptchaCollection\2.png");
if (HashImage(im1) == HashImage(im2))
{
MessageBox.Show("Same Image");
}
else
{
MessageBox.Show("Different Image");
}
}
如果单击按钮,它将比较这两个图像。
这是用于散列图像的代码。
public byte[] HashImage(Bitmap image)
{
var sha256 = SHA256.Create();
var rect = new Rectangle(0, 0, image.Width, image.Height);
var data = image.LockBits(rect, ImageLockMode.ReadOnly, image.PixelFormat);
var dataPtr = data.Scan0;
var totalBytes = (int)Math.Abs(data.Stride) * data.Height;
var rawData = new byte[totalBytes];
System.Runtime.InteropServices.Marshal.Copy(dataPtr, rawData, 0, totalBytes);
image.UnlockBits(data);
return sha256.ComputeHash(rawData);
}
那么我如何使用HashImage() 方法来比较这两个图像,如果它们在视觉上是相同的呢?
我尝试比较 2 张明显相同但无法正确比较的图像。相反,我觉得这是一张不同的图片。
我什至试过这个,但它也不起作用。
if (HashImage(im1).Equals(HashImage(im2)))
更新:我已经尝试过了,但它也不起作用。
if (ReferenceEquals(HashImage(im1),HashImage(im2)))
【问题讨论】:
-
应该是 if (HashImage(im1) == HashImage(im2)) ...
-
@JTA 哦,我的错。感谢您的更正。但问题是,它仍然无法正常工作,因为它没有正确比较。它声称它是不同的,即使它们是相同的
-
您应该使用其他方法来处理数组,请在此处查看详细信息:stackoverflow.com/questions/713341/comparing-arrays-in-c-sharp
-
@Tony 我试过
ReferenceEquals,但它并没有真正起作用:(尽管感谢您的提示 -
ReferenceEquals是错误的解决方案,我的意思是Enumerable.SequenceEqual(a1, a2);实际上。
标签: c# image hash byte hashcode