JPEG解压缩在Windows体系结构中不一致

时间:2012-08-08 20:43:02

标签: c# .net image-processing jpeg

我正在使用不同版本的Windows的一堆计算机上测试JPEG解压缩。所有这些计算机都安装了.NET 4,我正在编译.NET 2和“任何CPU”平台目标。以下代码在不同系统上生成不同的输出。

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);

所有Win7 64位和WinXP 32位计算机都会产生一个结果。所有Win7 32位机器都会产生另一个结果。

为什么输出会有所不同?

5 个答案:

答案 0 :(得分:1)

它是由gdiplus.dll实现的。检查在不同系统上实际加载的版本和位数。

可能存在浮点问题,一台机器上允许MMX指令,而另一台机器不允许。

答案 1 :(得分:1)

可与this相关。

尝试将useEmbeddedColorManagement参数设置为true。

答案 2 :(得分:0)

我几乎不敢提出这个建议,但如果您找到或实施自己的jpeg解码器怎么办?去旧学校&amp;依靠基础设施除了给你一个字节流之外什么都不做。

这将是一个很大的痛苦,但可以消除你所看到的不一致。

答案 3 :(得分:0)

在所有计算机上安装latest version of GDI+,然后重试。

此外,如果您决定自己实施,我发现this sample过去很有用。

答案 4 :(得分:0)

这不是你的答案,我只是通过了一半。

我认为最好的解决方案是使用你自己的JPEG解码器,我找到了它的源代码:Mini Jpeg Decoder但它是用C ++编写的,我将它部署到Win32 dll文件,你可以找到它here。我正在努力在.net框架中使用它超过10个小时,但我没有成功!因为我对c ++没有任何线索。

相关问题