8

Delphi でマッピング プログラムを作成しました。このプログラムでは、ユーザーがメモリに保存したバックグラウンドでラスター イメージを読み込むことができます。あるケースでは、ユーザーは 44MB の BMP を正常にロードしましたが、プログラムの動作が遅く、印刷 (出力を並べて表示) するとリソース不足エラーが発生しました。BMP を PNG (3MB) に変換したところ、プログラムのパフォーマンスが大幅に向上し、印刷ジョブが成功しました。

PNG は同じサイズの DIB に拡張する必要があるため、パフォーマンスやリソースに違いがあるのはなぜですか? どちらかといえば、PNG をロードするには、より多くの作業とメモリ割り当てが必要です。私は何が欠けていますか?

明らかな答えがないように見えるので、これをさらに調査できるように、小さなデモ プロジェクトを作成します。

4

1 に答える 1

1

違いは圧縮です。

BMP = そのままの生データ PNG = 「ロスレス」圧縮を使用した同じ生データ

これは、プログラミング界で複数の方法で節約できます...

  1. 画像をロードすると、RAM にロードされる生データが少なくなります。
  2. 処理する生データが少なくなるため、必要なリソースが少なくなります。

タイリングは、たとえば、問題が指数関数的であることを意味します...

44MB x 10 タイル = 440MB

3MB x 10 タイル = 30MB

プリンターは大量のデータを処理することを好みません。より高価なプリンターを除いて、すべてのプリンターはドキュメント全体を一度に印刷することを好む傾向があります (たとえば、ストリーム全体をバッファリングします)。

したがって、アプリからユーザーは「印刷」と言います...コードは「これを10部送信します」と言い、プリンターは440MBの生データの「キャッシュ」を開始します。

最も一般的な家庭用プリンターは、PC に依存してキャッシュを実行し、与えられたものを印刷しますが、標準のオフィス プリンターはキャッシュを実行してからドキュメントを印刷します。

ただし...これは微調整できるオプションのことだと思います(ただし、プリンターによって異なると思います)。

編集:

ゲームプログラミングの世界から何かをここに:

http://www.gamedev.net/topic/450104-png-vs-bmp/

于 2012-04-12T13:35:45.147 に答える