Active Basic 自動でマスク画像を制作して、画像を透過する方法
ABの4.23.00を使用しています
今回、マスク画像を自動的に作成して、ビットマップ画像を透過して表示させる方法を考えているのですが、なかなかうまくいきません。
皆さんの知識をお貸しください。
とりあえず、グローバルで変数を用意しました。
Dim hMemDC As HDC
Dim hMemBmp As HBITMAP
Dim hIconDC As HDC
Dim hIconBmp As HBITMAP
BITMAPリソースに適当な画像を入れて、クリエイトイベントで変数に読み込みました。
※ビットマップの大きさは、32*32の物を使用してみました。
Dim hDC As HDC
hDC=GetDC(hMainWnd)
hIconDC=CreateCompatibleDC(hDC)
hMemDC=CreateCompatibleDC(hDC)
hIconBmp=LoadBitmap(GetModuleHandle(0),IDB_BITMAP1)
hMemBmp=CreateCompatibleBitmap(hDC,300,300)
SelectObject(hIconDC,hIconBmp)
SelectObject(hMemDC,hMemBmp)
背景の色を指定しました
SetBkColor(hIconDC,GetPixel(hIconDC,0,0))
とりあえず、hMemDCに画像をコピーしました。
BitBlt(hMemDC,0,0,32,32,hIconDC,0,0,SRCCOPY)
ReleaseDC(hMainWnd,hDC)
次に、再描写の処理のときに、マスク画像を用意する処理を入れてみたのですが、うまくいきません。
Dim hMaskDC As HDC
Dim hMaskBmp As HBITMAP
Dim hTempDC As HDC
Dim hTempBmp As HBITMAP
hMaskDC=CreateCompatibleDC(hMemDC)
hMaskBmp=CreateBitmap(32,32,1,1,0)
SelectObject(hMaskDC,hMaskBmp)
BitBlt(hMaskDC,0,0,32,32,hIconDC,0,0,SRCCOPY)
hTempDC=CreateCompatibleDC(hDC)
hTempBmp=CreateCompatibleBitmap(hMemBmp,32,32)
SelectObject(hTempDC,hTempBmp)
BitBlt(hTempDC,0,0,32,32,hMaskDC,0,0,NOTSRCCOPY)
BitBlt(hTempDC,0,0,32,32,hIconDC,0,0,SRCAND)
BitBlt(hMemDC,0,0,32,32,hMaskDC,0,0,SRCAND)
BitBlt(hMemDC,0,0,32,32,hTempDC,0,0,SRCPAINT)
DeleteDC(hMaskDC)
DeleteObject(hMaskBmp)
DeleteDC(hTempDC)
DeleteObject(hTempBmp)
BitBlt(hDC,0,0,32,32,hMemDC,0,0,SRCCOPY)
このような感じで書いてみました
すみませんが、添削をお願いします
お礼
ありがとうございました