2012-04-05 6 views
8

デルファイでは、ユーザーがメモリに保存する背景にラスタイメージを読み込むことができるマッピングプログラムを作成しました。あるケースでは、ユーザーは44MBのBMPを正常にロードしましたが、プログラムは低速で、印刷したとき(出力をタイルする)Out Of Resourcesエラーが発生しました。私はBMPをPNG(3MB)に変換し、プログラムのパフォーマンスが向上し、印刷ジョブは成功しました。大きなファイルでPNGとBMPを使用する効率

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

明らかな回答はないようですので、私はこれをさらに研究することができるように、小さなデモプロジェクトを作成します。

+3

あなたはBMPやPNGファイルはピクセルとBitsPerPixelの同じ番号を持つ正はありますか? –

+0

画像の印刷にはどのようなものがありますか?あなたはPrinter.Canvasに直接書くか、QuickReportやRaveのようなレポート上のコンポーネントを使っていますか? – rkawano

+0

フランソワ:はい、私は顧客ファイルを得て、それを自分で試しました。 rkawano:プリンタキャンバスに送るDIBタイルに印刷します。 – Mitch

答えて

1

違いは圧縮です。

BMP =生データ

  1. 画像結果をロード...これは、プログラミング界で1つの以上の方法の節約を有する「ロスレス」圧縮を

    を用い PNG =同一の生データであるとして生のデータをRAMにロードする際の負荷を軽減します。

  2. 生データの処理が少ないので、必要なリソースが少なくなります。

タイルはあなたのための問題は、例えば、指数関数的であることを意味...

44メガバイト×10枚のタイル= 440メガバイト

3メガバイトは10枚のタイル= 30メガバイト

プリンタドンxは大量のデータを手渡すのが好きですが、高価なプリンタを除くすべてのプリンタは、一度に文書を印刷して全体の流れをバッファリングする傾向があります。

あなたのアプリから、「印刷」と言うと、あなたのコードは「これを10部印刷します」と言い、プリンタは440MBの生データを「キャッシュ」し始めます。

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

しかし、これはオプションです(私はそれがプリンタからプリンタに変わると思っています)。

EDIT:

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

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

+0

コードをトレースする際、PNGはメモリ内のBMPと同じサイズのDIBに展開されます。私はより多くのメモリ効率的なコードは、必要に応じて変換を行うだろうと思います。 – Mitch

+0

タイリングが役に立たないと言っていますか?デバイス解像度でタイルに部分を描画し、それをプリンタに渡します。私は直接描画してプリンタドライバに処理させてもらいましたが、透明性を失うことになります。 – Mitch

+0

あなたは何をしているのか完全にはっきりしていませんが、基本的な考え方は、プリンタに送る画像のすべての塊が処理され、通常は非圧縮の「生」データとして処理する必要があるということです。これはあなたのリソースの問題の原因になるかもしれません...コンピュータ上のプリンタ上のリソース...意味がありますか? – War

関連する問題