将位图转换为哈希

时间:2015-12-31 08:42:49

标签: c#-4.0 bitmap

我在屏幕截图项目上进行图像检测工作,我已经尝试了很多方法让我的程序找到图像,并且我在许多论坛上阅读了许多帖子,而不是它们正在工作。

现在我试图将位图转换为哈希并与其他图像哈希匹配,如果会有一些相似性,我会知道屏幕截图上是否有我的图像。但是我将Bitmap转换为哈希有问题。 这是我的代码:

Bitmap ScreenShot = new Bitmap(Screen.PrimaryScreen.WorkingArea.Width, Screen.PrimaryScreen.WorkingArea.Height);
Graphics g = Graphics.FromImage(ScreenShot);
g.CopyFromScreen(Point.Empty, Point.Empty, Screen.PrimaryScreen.WorkingArea.Size);
pictureBox1.Image = ScreenShot;
pictureBox1.Size = Screen.PrimaryScreen.WorkingArea.Size;


System.Drawing.ImageConverter ic = new System.Drawing.ImageConverter();
byte[] SS = new byte[1];
SS = (byte[])ic.ConvertTo(ScreenShot, SS.GetType());


SHA256Managed hash = new SHA256Managed();
byte[] hash1 = hash.ComputeHash(SS);

textBox1.Text = hash1.ToString();

这就是文本框显示的内容:System.Byte []

1 个答案:

答案 0 :(得分:0)

“System.Byte []”是任何字节数组的默认字符串表示形式。我相信您希望将字节数组视为字符串,以便进行调试,更容易处理或进行字符串比较。

实际上,字节有许多不同的方式表示为字符串。这些被称为编码。您可以将它们应用于您的字节数组,如下所示:

string resultstring = System.Text.Encoding.Default.GetString(hash1);

如果您不想处理编码,则可以将每个字节显示为字符。

char[] chars = new char[hash1.Length/sizeof(char)];
System.Buffer.BlockCopy(hash1, 0, chars, 0, hash1.Length);
string resultstring = new string(chars);

然而,字节操作比字符串操作更快,因此如果要进行大量的比较,请尝试以字节为单位(参见Comparing two byte arrays in .NET