【问题标题】:convert bitmap to hash将位图转换为哈希
【发布时间】:2015-12-31 17:04:02
【问题描述】:

我正在对屏幕截图项目进行图像检测,我尝试了很多方法让我的程序找到图像,并且我在许多论坛上阅读了很多帖子,但没有一个是有效的。

现在我正在尝试将位图转换为散列并与其他图像散列匹配,如果会有一些相似之处,我会知道屏幕截图上是否有我的图像。但是我在将位图转换为哈希时遇到了问题。 这是我的代码:

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[]

【问题讨论】:

    标签: c#-4.0 bitmap


    【解决方案1】:

    "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

    【讨论】:

      猜你喜欢
      • 2019-10-27
      • 2019-05-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-10-29
      相关资源
      最近更新 更多