VSN2003、C++、MFC使ってます。
PBM/PGM/PPM画像のビューアを作っています。
今はとりあえずPPM(P6)のみをターゲットにしています。
画像表示はOnDraw関数で1ピクセル毎に、
pDC->SetPixel(x, y, data[i]);
のようにやっています。
data[i]はCOLORREF構造体です。
しかし、この方法だと画像の表示が非常に遅いんです。
再描画のときも遅いし、複数起動したときなんか目も当てられない。
市販ソフトの描画とは小さい画像なら、ほとんど変わらないんですが、
1280x1024ピクセルぐらいから差が歴然となってしまって。
どうしたら早く表示できるようになるのか教えてください。
だいたいの方法さえ教えていただければ、
後はこちらで何とかしますけど、
できるだけ詳しくお願いします。
とりあえず、描く絵が毎回変わらないのであれば、
バックバッファに描いてOnDrawではそれをコピーするだけにすれば、
少なくとも再描画は速くできるはずですね。
再描画は PAI さんの言われるように裏画面がいいと思いますが、
PPM って中身は確か RGB が並んでるだけですよね。
最初にメモリ上で BITMAP に変換してしまえば
遅い SetPixel を使わなくても他の API が使えるので
それだけでも違いそうです。
>PPM って中身は確か RGB が並んでるだけですよね。
その通りです。
PPMのデータをBMPに変換するのが手っ取り早そうですね。
ビットマップの構造は、さっき勉強しておきましたし、
ビットマップビューアも作ってみましたし。
PPMは、24bitカラーのビットマップ、
PGMは、グレイスケールなので8bitビットマップ、
PBMは、モノクロなので、1bitビットマップ
とそれぞれ、ほぼ同じ構造(4byte境界だけ注意か)なので、
変換自体のプログラムは、それほど重くなさそうです。
それでもチラツキが目立ったら、裏画面に挑戦してみます。
(だいぶ前に一度やったんですけど、忘れてました)
PAIさん、Banさん、ありがとうございます。