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 ビット マシンは、1 つの結果を生成します。また、すべての 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デコーダーを使用することだと思います。そのためのソース コードを見つけまし。それを.netフレームワークで使用するのに10時間以上かかりましたが、成功しませんでした! C++ についての知識がまったくないからです。

于 2012-09-02T15:30:21.453 に答える
0

これを提案するのはほとんど恐れていますが、独自の jpeg デコーダーを見つけたり実装したりしたらどうでしょうか? 古い学校に行き、インフラストラクチャに依存して、バイトのストリームを提供するだけです。

これを行うのは非常に面倒ですが、見ている矛盾を解消することができます。

于 2012-08-30T20:42:41.307 に答える