编辑:这第一部分似乎不是问题,见下文(感谢 Ted 和 Jim):
这是 p-hash 实现的一部分。代码运行良好且一致,但在 64 与 32 下编译时,某些图像的结果略有不同。(平均值为 uint)
ulong hash = 0;
for (int i = 0; i < 64; i++)
if (grayscale[i] >= averageValue)
{
hash |= (1UL << (int)(63L - i));
}
在VS2010下编译。任何改变实施的想法?
谢谢!
编辑:问题似乎不在那个部分,而是在阅读图像并浓缩它。
我得到这样的图像(图像是传递的位图图像):
// Squeeze the image into an 8x8 canvas
Bitmap squeezed = new Bitmap(8, 8, PixelFormat.Format32bppRgb);
Graphics canvas = Graphics.FromImage(squeezed);
canvas.CompositingQuality = CompositingQuality.HighQuality;
canvas.InterpolationMode = InterpolationMode.HighQualityBilinear;
canvas.SmoothingMode = SmoothingMode.HighQuality;
canvas.DrawImage(image, 0, 0, 8, 8);
然后在嵌套的 for 循环中
uint pixel = (uint)squeezed.GetPixel(x, y).ToArgb();
但这些值不同:
4287269514 4290559164 4290559164 4289835184 4285687133 4285421390 4288056455 4290427578 4290559164 4294769916 ....
与:
4287335307 4290559164 4290559164 4289900719 4285752925 4285487183 4288121992 4290493371 4290559164 4294901502 ....