Jak porównać, jeśli 2 obrazy są takie same przy użyciu bajtów skrótu?
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");
}
}
Kliknięcie przycisku spowoduje porównanie tych 2 zdjęć.
Oto kod używany do mieszania obrazu.
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);
}
Więc jak korzystać zHashImage()
metoda porównania obu tych obrazów, jeśli są takie same wizualnie, czy nie?
Próbowałem porównać 2 obrazy, które są wyraźnie takie same, ale nie działają, aby porównać poprawnie. Zamiast tego mam wrażenie, że to inny obraz.
Próbowałem nawet tego, ale to też nie działa.
if (HashImage(im1).Equals(HashImage(im2)))
AKTUALIZACJA: Próbowałem tego, ale to też nie działa.
if (ReferenceEquals(HashImage(im1),HashImage(im2)))