1

答えてくれてありがとう、実際私は描画に戸惑っていません1024 *768ピクセルは100*100ピクセルより遅いです...それはとても単純なロジックです..私を困惑させたのは、DrawImageの補間アルゴリズムが存在する間は非常に遅いかもしれないということです多くのより良いアルゴリズム、そしてそのデコーダーは特定の解像度でjpgからデコードできるようです、それは本当にクールです、私はいつか検索しますが、これを行うための無料のライブラリは見つかりません...

本当に不思議です!Paintメソッドに次のコードを追加します。c:\1.jpgは5Mjpgファイル、約4000 * 3000

// ------------------------------------------------ --------------

HDC hdc = pDC->GetSafeHdc();
bitmap = Bitmap::FromFile(L"c:\\1.jpg",true);
Graphics graphics(hdc);
graphics.SetInterpolationMode( InterpolationModeNearestNeighbor );
graphics.DrawImage(bitmap,0,0,200,200);

上記は本当に速いです!リアルタイムでも!5m JPGのデコードはそれほど速くないと思います!

// ------------------------------------------------ --------------

HDC hdc = pDC->GetSafeHdc();
bitmap = Bitmap::FromFile(L"c:\\1.jpg",true);
Graphics graphics(hdc);
graphics.SetInterpolationMode( InterpolationModeNearestNeighbor );
graphics.DrawImage(bitmap,0,0,2000,2000);

上記のコードは本当に遅くなります

// ------------------------------------------------ --------------

Bitmap = Bitmap :: FromFile(L "c:\ 1.jpg"、true);を追加すると //構成に

離れる

    Graphics graphics(hdc);
    graphics.SetInterpolationMode( InterpolationModeNearestNeighbor );
    graphics.DrawImage(bitmap,0,0,2000,2000);

OnPaintメソッドでは、コードはまだ少し遅いです~~~

// ------------------------------------------------ ------------------

デコードと比較すると、drawImageプロセスは本当に遅いです...

なぜそしてどのように彼らはそれをしましたか?マイクロソフトは、drawingImageの作成を担当する男性よりも、デコーダーの2倍の給与を担当する男性に支払いましたか?

4

4 に答える 4

5

だから、あなたが本当に疑問に思っているのは、その理由です

graphics.DrawImage(bitmap,0,0,200,200);

よりも速い

graphics.DrawImage(bitmap,0,0,2000,2000);

正しい?

2 番目のケースで 100 倍のピクセルを描画しているという事実は、それと関係がある可能性があります。

于 2008-11-07T07:41:27.857 に答える
2

8 分の 1 に縮小する場合は、JPG をデコードする必要はありません。JPG 画像は、DCT 変換された 8 x 8 ピクセルのブロックで構成されます。このブロックの平均値は、DCT の 0,0 係数です。したがって、8 分の 1 にスケールダウンすることは、他のすべてのコンポーネントを捨てるだけの問題です。さらに縮小する (例: 4000->200) とは、単に 4000 から 500 ピクセルに縮小し、通常は 500 から 200 ピクセルに縮小することです。

于 2008-11-07T10:23:36.610 に答える
2

必要になるまでデコードが延期される可能性があります。それがとても速い理由です。

おそらく、200x200 の場合、GDI+ は 200x200 をペイントするのに十分なブロックのみをデコードし、2000x2000 の場合はさらにデコードします。

グラフィックルーチンには常に、あなたが知ることのできないあいまいな最適化が含まれています。

リフレクターが教えてくれるかも?

于 2008-11-07T07:45:22.043 に答える
0

推測ですが、4000x3000または2000x1500で描画してみてください。おそらく、4000と3000が200で割り切れるという事実は全体をスピードアップし、3000が200で割り切れないという事実はそれを遅くします(これは本当に奇妙ですが)。

一般に、プロファイリングまたは時間測定を行います。2000x2000が200x200の約100倍遅い場合は、すべて問題ありません。また、2000x2000が遅すぎても気にしないでください。画面が1024x768の場合、画像全体を見ることができないため、画面に表示されている画像の部分を選択して描画することをお勧めします。1024x768は2000x2000の5倍の速度です。

于 2008-11-07T09:58:43.320 に答える