我正在尝试实现与RDP非常相似的东西,只是我想做自己的实现。原因无关紧要。
出于优化原因,我将屏幕划分为几个块(100x100)。所以我只将更改的块发送到客户端,而不是每次都发送整个屏幕。为了检测每个块上的这些变化,我正在比较MD5哈希,问题是即使它正在工作,也会检测到几个块作为更改,即使它们没有被更改。我不明白为什么会这样。
以下是调试图像的链接。查看突出显示的区域,检测到更改的位置以及未检测到任何更改的位置。
这是为图像生成哈希的方法:
private static string GetMd5FromImage(Image image)
{
using (var stream = new MemoryStream())
{
image.Save(stream, ImageFormat.Jpeg);
using (var md5 = MD5.Create())
{
var computed = md5.ComputeHash(stream.ToArray());
var builder = new StringBuilder();
foreach (var t in computed)
{
builder.Append(t.ToString("X2"));
}
return builder.ToString();
}
}
}
相同的图像如何生成相同的哈希?我错过了什么?