Подтвердить что ты не робот

Декомпозиция JPEG несовместима в архитектуре Windows

Я тестирую декомпрессию JPEG на кучу компьютеров с разными версиями Windows. На всех этих компьютерах установлена ​​.NET 4, и я компилирую ее для .NET 2 и целевой платформы "Любой процессор". Следующий код производит различный вывод в разных системах.

Bitmap bmp = (Bitmap)Image.FromFile("test.jpg");

long datasum = 0;
for (int y = 0; y < bmp.Height; y++)
    for (int x = 0; x < bmp.Width; x++)
        datasum = datasum + bmp.GetPixel(x, y).R + bmp.GetPixel(x, y).G + bmp.GetPixel(x, y).B;

Console.WriteLine(datasum);

Все 64-битные 64-разрядные и WinXP файлы Win7P дают один результат. И все 32-разрядные машины Win7 дают еще один результат.

Любые идеи, почему вывод будет другим?

4b9b3361

Ответ 1

Это реализовано gdiplus.dll. Проверьте, какие версии на самом деле загружены в разные системы и бит.

Там может быть проблема с плавающей запятой, инструкции MMX разрешены на одной машине, а не на другой.

Ответ 2

Может быть связано с этим.

Попробуйте установить параметр useEmbeddedColorManagement в значение true.

Ответ 3

Я почти боюсь предложить это, но что, если вы найдете или реализуете свой собственный jpeg-декодер? Пойдите в старую школу и полагайтесь на инфраструктуру, чтобы ничего не сделать, как дать вам поток байтов.

Это было бы большой болью, но можно было бы устранить несоответствия, которые вы видите.

Ответ 4

Установите последнюю версию GDI + на всех машинах и повторите попытку.

Кроме того, если вы решите реализовать себя, я нашел этот пример полезный в прошлом.

Ответ 5

Это не ваш ответ, я просто прошел половину пути.

Я думаю, что лучшим решением является использование вашего собственного JPEG-декодера, я нашел для него исходный код: Mini Jpeg Decoder, но он на С++, я разверните это в файл DLL Win32, вы можете найти здесь здесь. это более 10 часов, что я работаю, чтобы использовать это в .NET Framework, но я не был успешен! потому что у меня нет никакой подсказки о С++.