透過コピー
Posted: 2005年6月20日(月) 15:37
あるデバイスコンテキストからもう1つのデバイスコンテキストへコピーする時に、
指定した色だけコピーしない様に(つまり透過)するにはどうすればいいのでしょうか?
BitBlt APIなどいろいろ調べたのですが分かりませんでした。
指定した色だけコピーしない様に(つまり透過)するにはどうすればいいのでしょうか?
BitBlt APIなどいろいろ調べたのですが分かりませんでした。
コード: 全て選択
Function MaskBlt(hdcDest As HDC, nXDest As Long, nYDest As Long, nWidth As Long, nHeight As Long, hdcSrc As HDC, nXSrc As Long, nYSrc As Long, bkColor As DWord) As Long
Dim hMaskDC As HDC, hMaskBmp As HBITMAP, oldBkColor As DWord, hTempDC As HDC, hTempBmp As HBITMAP, ret1 As Long, ret2 As Long
'背景色を指定
oldBkColor = SetBkColor(hdcSrc, bkColor)
'マスク用画像を作成
hMaskDC = CreateCompatibleDC(hdcSrc)
hMaskBmp = CreateBitmap(nWidth, nHeight, 1, 1, 0)
SelectObject(hMaskDC, hMaskBmp)
BitBlt(hMaskDC, 0, 0, nWidth, nHeight, hdcSrc, nXSrc, nYSrc, SRCCOPY)
'スプライト用画像を作成
hTempDC = CreateCompatibleDC(hdcSrc)
hTempBmp = CreateCompatibleBitmap(hdcSrc, nWidth, nHeight)
SelectObject(hTempDC, hTempBmp)
BitBlt(hTempDC, 0, 0, nWidth, nHeight, hMaskDC, 0, 0, NOTSRCCOPY)
BitBlt(hTempDC, 0, 0, nWidth, nHeight, hdcSrc, nXSrc, nYSrc, SRCAND)
'スプライト処理
ret1 = BitBlt(hdcDest, nXDest, nYDest, nWidth, nHeight, hMaskDC, 0, 0, SRCAND)
ret2 = BitBlt(hdcDest, nXDest, nYDest, nWidth, nHeight, hTempDC, 0, 0, SRCPAINT)
'全て元に戻す
SetBkColor(hdcSrc, oldBkColor)
DeleteDC(hTempDC) : DeleteObject(hTempBmp)
DeleteDC(hMaskDC) : DeleteObject(hMaskBmp)
If ret1 = 1 and ret2 = 1 Then
MaskBlt = 1
Else
MaskBlt = 0
End If
End Function