掲示板システム
ホーム
アクセス解析
カテゴリ
ログアウト
bitmapの透過 (ID:55868)
名前
ホームページ(ブログ、Twitterなど)のURL (省略可)
本文
>なので、そこでもらったアドバイスにDIBを使うと良い、といわれたので、 そんな事はありません。StretchDIBtisを使う度にDIB-DDB変換が行われるので、 かえって重くなります。 WM_PAINTのたびにメモリDCをCreateCompatibleDCすると重いので、 グローバルにして使いまわすだけで正解だと思います。 どうしてもDIBで行いたい場合は、CreateMaskのDIB版を作成する必要があります。 ソースがちょっとおかしいです。 WM_CREATE: hBmp01 = LoadImage(); hdc = GetDC(hWnd); hDC01 = CreateCOmpatibleDC(hdc); // SelectObject(hDC01, hBmp01); // hDC01がもともと持っているHBITMAPが行方不明になっています。 HBITMAP preBmp = SelectObject(hDC01, hBmp01); // preBmpは2度と使わないのならDeleteする。 DeleteObject(preBmp) ; //DeleteDC() // Release? ReleaseDC(hdc) ;//シャノンさんの指摘の通り CreateMask(hDC01, hDC01_mask, hBmp01, &hBmp01_mask);//マスクを作る関数 //hDC01_mask と hBmp01_mask にマスクが作られる WM_PAINT: BitBlt(hdc, ..... , hDC01_mask, SRCAND); BitBlt(hdc, ......, hDC01, SRCPAINT); WM_CLOSE: DeleteDC(hDC01); //DeleteObject(hBmp01); // hDC01がDeleteされる時に選択されているHBITMAPは同時に破棄されるので // hBmp01の破棄は不要。 DeleteDC(hDC01_mask); Deleteobject(hBmp01_mask);
←解決時は質問者本人がここをチェックしてください。
戻る
掲示板システム
Copyright 2021 Takeshi Okamoto All Rights Reserved.