Растровое изображение читается иначе 32/64 битная сборка

РЕДАКТИРОВАТЬ: Эта первая часть, кажется, не проблема, см. Ниже (спасибо Тед и Джим):

Это часть реализации 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);

а затем во вложенном цикле

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....

0 ответов

Другие вопросы по тегам