登録日時: 2009年3月29日(日) 15:45 記事: 106
|
ご回答ありがとうございます。
参考にして、しばらく戦っていましたが、どうしても、合成ができません。
[ここをクリックすると内容が表示されます] [ここをクリックすると非表示にします]コード: Function Export MakeMaskWith( ByVal hBmp as HBITMAP ) as HBITMAP
Dim hDC as HDC, hTemp As HDC, hDest as HDC
Dim hMaskDC As HDC,hMaskBmp As HBITMAP
Dim hBmpTemp as HBITMAP, dummy(2) as HBITMAP
Dim bmp as BITMAP
hDC=GetDC(NULL)
hTemp=CreateCompatibleDC(hDC)
hDest=CreateCompatibleDC(hDC)
hMaskDC=CreateCompatibleDC(hDC)
ReleaseDC(NULL,hDC)
' 元画像の情報の取得
GetObject(hBmp,Len(bmp),bmp)
' モノクロBITMAPの生成
hBmpTemp=CreateCompatibleBitmap(hDest,bmp.bmWidth,bmp.bmHeight)
hMaskBmp=CreateCompatibleBitmap(hMaskDC,bmp.bmWidth,bmp.bmHeight)
dummy(0)=SelectObject(hTemp,hBmp)
dummy(1)=SelectObject(hDest,hBmpTemp)
dummy(2)=SelectObject(hMaskDC,hMaskBmp)
SetBkColor(hTemp,GetPixel(hTemp,0,0))
' 背景マスクの生成
BitBlt(hDest,0,0,bmp.bmWidth,bmp.bmHeight,hTemp,0,0,SRCCOPY)
BitBlt(hMaskDC,0,0,bmp.bmWidth,bmp.bmHeight,hDest,0,0,NOTSRCCOPY)
BitBlt(hTemp,0,0,bmp.bmWidth,bmp.bmHeight,hMaskDC,0,0,SRCAND)
' HBITMAPの切り離し
SelectObject(hTemp,dummy(0))
SelectObject(hDest,dummy(1))
SelectObject(hMaskDC,dummy(2))
' HDCの後始末
DeleteDC(hTemp)
DeleteDC(hDest)
DeleteDC(hMaskDC)
' 呼び出し元への返り値
MakeMaskWith=hMaskBmp
End Function
ここまでできました。
コード: ' 背景マスクの生成
BitBlt(hDest,0,0,bmp.bmWidth,bmp.bmHeight,hTemp,0,0,SRCCOPY)
BitBlt(hMaskDC,0,0,bmp.bmWidth,bmp.bmHeight,hDest,0,0,NOTSRCCOPY)
BitBlt(hTemp,0,0,bmp.bmWidth,bmp.bmHeight,hMaskDC,0,0,MERGEPAINT)
ここで、3つ目の処理をコメントにして、2つ目の処理のBmpを戻り地として返したところ、
背景が黒、画像部分が白のマスク画像ができました。
3つ目の処理で、元画像と合成しようとしたのですが、背景がしろ、画像部が黄色になってしまい、わけがわからなくなってしまいました。
これはどのようにしていけばいいのでしょうか?
|
|