• 締切済み

BMP画像の拡大について

現在BMPファイルを読み込んで表示させるプログラムを作成しています。 このプログラムに拡大表示機能を追加しようとして、試しにStretchBltで倍の大きさに拡大しようとしたらエラー(おそらくメモリ不足?)となってしまいました。 このような機能を作成する場合に何か良い方法があったら教えていただけないでしょうか。 またMSDNを見て思ったのですがStretchBltとStretchDIBitsは同じようなことを行なう関数のように思えるのですがどちらを使用すべきなのでしょうか。 初歩的な質問かもしれませんがご教授願います。 開発環境:WindowsXP Pro / VC++ 6.0

みんなの回答

  • titokani
  • ベストアンサー率19% (341/1726)
回答No.4

該当部分のソースを公開したほうが、話が早いような気がしますが、SelectObjectを元に戻すのを忘れてるとか。

  • titokani
  • ベストアンサー率19% (341/1726)
回答No.3

とりあえず、GetLastErrorで本当にメモリ不足なのかどうか確認しましょう。

MOYAJI
質問者

お礼

回答ありがとうございます GetLastErrorで確認してみましたがやはりメモリが足りないようでした。

MOYAJI
質問者

補足

いろいろ試して分かったのですが単にBMPを読み込んで拡大する分には10倍だろうと20倍だろうとできるのですが、最初にStretchBltでBMPを表示し、同じサイズのBMPを作成(CreateCompatibleDC,CreateCompatibleBitmap)して最初に表示したBMPの上にStretchBlt(SRCAND指定)で重ねようとすると2倍とかもエラーになっていました。 メモリは前者のほうが多く使用すると思うのですがなぜ後者のほうがエラーとなってしまうのかがわかりません。 もし思い当たることがありましたらご教授願えないでしょうか。

回答No.2

 こんにちは。  StretchDIBitsの方は、ビットマップハンドルを作成していない状態から、描画出来ます。  要はファイルから丸ごと吸い上げたバッファを、sizeof(BITMAPFILEHEADER)の分だけずらして其のまま渡す様な感じで使用出来ます。  StretchBltはビットマップハンドルを作成している時に描画出来ます。此方の方がより多く使われているように思えます。

MOYAJI
質問者

お礼

回答ありがとうございます。 何か処理の仕方も違うのかなと思っていたのですがハンドルの有無とかの違いだけなんですね。 ありがとうございました。

  • wathavy
  • ベストアンサー率22% (505/2263)
回答No.1

メモリ不足かどうかの確認のため、1.1倍くらいの拡大率で試験してみてはいかがでしょうか? それでも駄目なら、コーディングの問題ですよね。

MOYAJI
質問者

お礼

回答ありがとうございます。 質問時に書き忘れていましたが1.5倍位までは拡大できていました。 なので処理自体は問題ないと思っています。

関連するQ&A