メモリ上のビットマップデータの拡大・縮小コピー

フォーラム(掲示板)ルール
フォーラム(掲示板)ルールはこちら  ※コードを貼り付ける場合は [code][/code] で囲って下さい。詳しくはこちら
kazuoni

メモリ上のビットマップデータの拡大・縮小コピー

#1

投稿記事 by kazuoni » 16年前

お邪魔します。

題名の通り、メモリ上のビットマップデータを拡大、縮小をStretchBltを用いて施し、
それを一時保存しようとしています。

ここでソースを書くのはかなり見づらくなるので、プロジェクトごとアップしました。
(画像読み込みには、ルーチェ's Homepage管理人様、ルーチェさんの作成されたimgct.dllを使用しています)
問題となっているのは、Graph.cppの関数DrawRoteです。

自分はビットマップデータをメインビットマップと
マスクビットマップに分けて管理しています。

一連の流れですが、
1.メインビットマップデータを拡大し、StretchBltでtempBmpBfに保存
2.CreatMaskBmpによって、マスクビットマップデータ作成

です。現段階では、描写すると、四角形が赤で塗りつぶされて表示されます。
恐らく、ビットマップデータをtempBmpBfにコピーする段階で
うまく行われていないのですが、自分の知識では、解決できないでいます。。

裏描写用のデバイスコンテキストhdcから
CreateCompatibleDC
CreateCompatibleBitmap
SelectObject
の順で一時保存用のビットマップとそのデバイスコンテキストを生成しているのですが・・・
この段階で既に問題があるのか・・・

説明が足りない部分があるのなら、聞いてください。。
よろしくお願いします。

Ne_60622.zip
http://www1.axfc.net/uploader/Ne/so/60622
DLキー:kazuoni

#補足
なぜ、一時保存しているのかというと、拡大したものを
回転する関数でもあるので、一時拡大したものを保存しておき、
そこから、保存したものを、回転して描写したいというものによります。

Justy

Re:メモリ上のビットマップデータの拡大・縮小コピー

#2

投稿記事 by Justy » 16年前

 あんまり深く読みといていないので意図した通りになるかわかりませんが、
こんな感じでしょうか。

[color=#d0d0ff" face="monospace]
HDC tempMaskBf=0;
HDC tempBmpBf=CreateCompatibleDC(hdc);
HBITMAP tempMaskBmp=0;
HBITMAP tempBmpBmp=CreateCompatibleBitmap(hdc,(int)(this->xSize*ExtX),(int)(this->ySize*ExtY));
HBITMAP tempMaskPrevBmp=0;
HBITMAP tempBmpPrevBmp=(HBITMAP)SelectObject(tempBmpBf,tempBmpBmp);

if( !StretchBlt( tempBmpBf, 0, 0, (int)(this->xSize*ExtX),(int)(this->ySize*ExtY),// 描画先
GetBitmap(), cellNum%this->xNum*this->xSize, cellNum/this->xNum*this->ySize,this->xSize, this->ySize, // 描画元
SRCCOPY )
||
!CreatMaskBmp(hdc,this->colorKey,tempBmpBf,&tempMaskBf,&tempMaskBmp,&tempMaskPrevBmp,(int)(this->xSize*ExtX),(int)(this->ySize*ExtY) )
)
[/color]

kazuoni

Re:メモリ上のビットマップデータの拡大・縮小コピー

#3

投稿記事 by kazuoni » 16年前

Justyさん、ご回答ありがとうございます!

またもズバっと正解でした。。

ラスタオペレーションコード・・・
もろ間違えてますね。。転送先とandしても、まったくの無意味でした。。

CreateCompatibleBitmapの第一引数が
「互換性を取るデバイスコンテキストのハンドル」
ってのは、msdnをみて、分かっていましたが、
互換性っという意味もわからず、つながりのあるハンドル= tempBmpBf
と決め打ちしていました。
(よくみたら、msdnでも下にサンプルが載っていました。。)

ソースを見て、回答していただき、手間をとらせてしまい、
大変申し訳ありませんでした。
とても助かりました。
次回もよろしくお願いします。

閉鎖

“C言語何でも質問掲示板” へ戻る