異なるバージョンのWindowsを搭載した多数のコンピュータでJPEG解凍をテストしています。これらのコンピュータはすべて.NET 4がインストールされており、.NET 2と「Any CPU」プラットフォームのターゲットに対してコンパイルしています。次のコードは、異なるシステムで異なる出力を生成します。Windowsアーキテクチャ間でJPEG伸張が一貫していません
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は非可逆圧縮です。再構成中、inverse-dct、カラー変換、または逆量子化の間に浮動小数点の違いに遭遇する可能性があります。 – jcopenha
私は512x512の画像を黒で多く使用しましたが、結果として5590758と5591908が表示されています。違いは小さいが、私はXPがWin7-64にはマッチするがWin7-32にはマッチしない理由を理解していない。おそらく、そのような行動を説明する文書やサイトがありますか? – Jono
jpeg圧縮解除について本当に興味がありますか?それとももっと大きな問題がここにあるのですか? –