- 締切済み
BMP画像の拡大について
現在BMPファイルを読み込んで表示させるプログラムを作成しています。 このプログラムに拡大表示機能を追加しようとして、試しにStretchBltで倍の大きさに拡大しようとしたらエラー(おそらくメモリ不足?)となってしまいました。 このような機能を作成する場合に何か良い方法があったら教えていただけないでしょうか。 またMSDNを見て思ったのですがStretchBltとStretchDIBitsは同じようなことを行なう関数のように思えるのですがどちらを使用すべきなのでしょうか。 初歩的な質問かもしれませんがご教授願います。 開発環境:WindowsXP Pro / VC++ 6.0
- みんなの回答 (4)
- 専門家の回答
みんなの回答
- titokani
- ベストアンサー率19% (341/1726)
該当部分のソースを公開したほうが、話が早いような気がしますが、SelectObjectを元に戻すのを忘れてるとか。
- titokani
- ベストアンサー率19% (341/1726)
とりあえず、GetLastErrorで本当にメモリ不足なのかどうか確認しましょう。
- machongola
- ベストアンサー率60% (434/720)
こんにちは。 StretchDIBitsの方は、ビットマップハンドルを作成していない状態から、描画出来ます。 要はファイルから丸ごと吸い上げたバッファを、sizeof(BITMAPFILEHEADER)の分だけずらして其のまま渡す様な感じで使用出来ます。 StretchBltはビットマップハンドルを作成している時に描画出来ます。此方の方がより多く使われているように思えます。
お礼
回答ありがとうございます。 何か処理の仕方も違うのかなと思っていたのですがハンドルの有無とかの違いだけなんですね。 ありがとうございました。
- wathavy
- ベストアンサー率22% (505/2263)
メモリ不足かどうかの確認のため、1.1倍くらいの拡大率で試験してみてはいかがでしょうか? それでも駄目なら、コーディングの問題ですよね。
お礼
回答ありがとうございます。 質問時に書き忘れていましたが1.5倍位までは拡大できていました。 なので処理自体は問題ないと思っています。
お礼
回答ありがとうございます GetLastErrorで確認してみましたがやはりメモリが足りないようでした。
補足
いろいろ試して分かったのですが単にBMPを読み込んで拡大する分には10倍だろうと20倍だろうとできるのですが、最初にStretchBltでBMPを表示し、同じサイズのBMPを作成(CreateCompatibleDC,CreateCompatibleBitmap)して最初に表示したBMPの上にStretchBlt(SRCAND指定)で重ねようとすると2倍とかもエラーになっていました。 メモリは前者のほうが多く使用すると思うのですがなぜ後者のほうがエラーとなってしまうのかがわかりません。 もし思い当たることがありましたらご教授願えないでしょうか。