画像表示の高速化について質問

[戻る]
reshia 2004/10/09(土) 20:52:33
VSN2003、C++、MFC使ってます。
PBM/PGM/PPM画像のビューアを作っています。
今はとりあえずPPM(P6)のみをターゲットにしています。

画像表示はOnDraw関数で1ピクセル毎に、
 pDC->SetPixel(x, y, data[i]);
のようにやっています。
data[i]はCOLORREF構造体です。

しかし、この方法だと画像の表示が非常に遅いんです。
再描画のときも遅いし、複数起動したときなんか目も当てられない。
市販ソフトの描画とは小さい画像なら、ほとんど変わらないんですが、
1280x1024ピクセルぐらいから差が歴然となってしまって。

どうしたら早く表示できるようになるのか教えてください。
だいたいの方法さえ教えていただければ、
後はこちらで何とかしますけど、
できるだけ詳しくお願いします。

PAI 2004/10/09(土) 21:16:28
とりあえず、描く絵が毎回変わらないのであれば、
バックバッファに描いてOnDrawではそれをコピーするだけにすれば、
少なくとも再描画は速くできるはずですね。

Ban 2004/10/09(土) 21:35:13
再描画は PAI さんの言われるように裏画面がいいと思いますが、
PPM って中身は確か RGB が並んでるだけですよね。
最初にメモリ上で BITMAP に変換してしまえば
遅い SetPixel を使わなくても他の API が使えるので
それだけでも違いそうです。

reshia 2004/10/09(土) 22:10:57
[[解決]]
>PPM って中身は確か RGB が並んでるだけですよね。
その通りです。

PPMのデータをBMPに変換するのが手っ取り早そうですね。
ビットマップの構造は、さっき勉強しておきましたし、
ビットマップビューアも作ってみましたし。

PPMは、24bitカラーのビットマップ、
PGMは、グレイスケールなので8bitビットマップ、
PBMは、モノクロなので、1bitビットマップ
とそれぞれ、ほぼ同じ構造(4byte境界だけ注意か)なので、
変換自体のプログラムは、それほど重くなさそうです。

それでもチラツキが目立ったら、裏画面に挑戦してみます。
(だいぶ前に一度やったんですけど、忘れてました)
PAIさん、Banさん、ありがとうございます。

古いスレッドには追加発言できません。