13

我正在使用不同版本的 Windows 的一堆计算机上测试 JPEG 解压缩。所有这些计算机都安装了 .NET 4,我正在针对 .NET 2 和“Any 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 位机器都会产生另一个结果。

任何想法为什么输出会不同?

4

5 回答 5

1

它由 gdiplus.dll 实现。检查哪些版本实际加载在不同的系统上,以及位数。

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

于 2012-08-09T04:07:32.310 回答
1

可与有关。

尝试将 useEmbeddedColorManagement 参数设置为 true。

于 2012-08-13T22:53:16.370 回答
0

在所有机器上安装最新版本的 GDI+,然后重试。

此外,如果您决定自己实现,我发现这个示例在过去很有用。

于 2012-09-01T19:53:44.203 回答
0

我几乎不敢提出这个建议,但是如果您找到或实现自己的 jpeg 解码器怎么办?走老路,依靠基础设施只给你一个字节流。

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

于 2012-08-30T20:42:41.307 回答
0

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

我认为最好的解决方案是使用您自己的 JPEG 解码器,我找到了源代码:Mini Jpeg 解码器,但它是 C++ 的,我将它部署到 Win32 dll 文件,你可以在这里找到它。我在 .net 框架中使用它已经超过 10 个小时,但我没有成功!因为我对c++一无所知。

于 2012-09-02T15:30:21.453 回答