Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/clojure/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# JPEG解压缩在Windows体系结构中不一致_C#_.net_Image Processing_Jpeg - Fatal编程技术网

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

C# JPEG解压缩在Windows体系结构中不一致,c#,.net,image-processing,jpeg,C#,.net,Image Processing,Jpeg,我正在使用不同版本的Windows在一堆计算机上测试JPEG解压缩。所有这些计算机都安装了.NET4,我正在针对.NET2和“任何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++)

我正在使用不同版本的Windows在一堆计算机上测试JPEG解压缩。所有这些计算机都安装了.NET4,我正在针对.NET2和“任何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);
Bitmap bmp=(Bitmap)Image.FromFile(“test.jpg”);
长数据量=0;
对于(int y=0;y
所有的Win7 64位和WinXP 32位机器都会产生一个结果。所有的Win32位机器都会产生另一个结果


知道为什么输出会不同吗?

它是由gdiplus.dll实现的。检查不同系统上实际加载的版本以及比特率

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

可能与有关


请尝试将UseMbeddedColorManagement参数设置为true。

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

这将是一个很大的难题,但可以消除您看到的不一致性。

在所有计算机上安装,然后重试


另外,如果你决定自己实现,我发现过去很有用。

这不是你的答案,我只是半途而废


我认为最好的解决方案是使用你自己的JPEG解码器,我找到了源码:但是它是C++的,我把它部署到Win32 DLL文件,你可以找到它。我花了10个多小时在.net框架中使用它,但我没有成功!因为我没有任何关于C++的线索。

有什么不同?JPEG是一种有损压缩。在重建过程中,你可能会在逆dct、颜色变换或去量化过程中遇到浮点差异。我使用了一个带有大量黑色的512x512图像,结果是5590758和5591908。虽然差别很小,但我不明白为什么XP会匹配Win7-64而不是Win7-32。也许有一个文档或网站解释了这种行为?你真的对jpeg解压缩那么好奇吗?或者这里还有更大的问题吗?我正在研究一个科学应用程序,它要求JPEG在不同平台上的解码完全相同。不幸的是,我的源代码只提供JPEG而不是位图类型。我建议使用实用程序转换格式,并可能分发转换后的文件,而不是JPEG。您要求的一致性不是JPEG的合理要求。我在c:\windows\winsxs\中有许多不同版本的gdiplus.dll。我怎么知道该看哪一个?我要说的是,我确实检查了计算机上c:\windows\system32\gdi32.dll的版本。Win7机器上的版本(32位和64位)相同。XP计算机上的版本与Win7计算机不匹配。这些差异并不反映我在原始问题中的观察结果。调试器、tlist、vmmap和process explorer都可以看出。Win32和64位都在使用版本6.1.7601作为gdi32.dll、gdiplus.dll和WindowsCodecs.dll。Win XP使用的是gdi32.dll版本5.1.2600.5698、gidplus.dll版本5.2.6002.22791和WindowsCodecs.dll 6.0.6001.17009。好主意。刚试过,但不影响效果。顺便问一下,你能用位图试试吗?这样我们就可以更具体地了解这个问题。此外,WinXP上安装了哪个service pack?将UseMbeddedColorManagement设置为true或false不会影响结果。当我尝试使用位图文件而不是Jpeg文件时,所有这些平台的总和都是一致的。这是一个好主意,我当然不会排除这种可能性。我仍然很好奇上述问题到底在哪里。