【发布时间】:2012-08-06 01:19:03
【问题描述】:
我正在使用不同版本的 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 位机器都会产生另一个结果。
任何想法为什么输出会不同?
【问题讨论】:
-
有何不同? JPEG 是一种有损压缩。在重建期间,您可能会在逆 dct、颜色变换或去量化期间遇到浮点差异。
-
我使用了一个 512x512 的图像,其中有很多黑色,我得到了 5590758 和 5591908 的结果。虽然差异很小,但我不明白为什么 XP 会匹配 Win7-64 而不是 Win7-32。也许有解释这种行为的文档或网站?
-
你对jpeg解压真的那么好奇吗?还是这里有更大的问题在起作用?
-
我正在开发一个科学应用程序,该应用程序需要跨平台对 JPEG 进行完全相同的解码。不幸的是,我的来源只提供 JPEG,而不是位图类型。
-
我建议使用实用程序来转换格式并可能分发转换后的文件而不是 JPEG。您要求的一致性不是 JPEG 的合理要求。
标签: c# .net image-processing jpeg