|
|
发表于 2005-10-29 09:01:00
|
显示全部楼层
Re: 我用VB做RPG地图编辑器,遇到一个显示方面的问题
Public Function TransSRC(ByVal T_DC As Long, ByVal T_x As Long, ByVal T_y As Long, ByVal S_DC As Long, ByVal S_X As Long, ByVal S_Y As Long, ByVal S_Width As Long, ByVal S_Height As Long, ByVal TransColor As Long) As Boolean
'****************************************
' 透明图片显示函数2
'****************************************
Dim MaskDC, Maskbitmap As Long
Dim ForeDc, ForeBitmap As Long
Dim backDC, backBitmap As Long
ForeDc = CreateDCandBmpBySize(S_Width, S_Height)
BitBlt ForeDc, 0, 0, S_Width, S_Height, S_DC, S_X, S_Y, SRCCOPY
ForeBitmap = hBitmap
backDC = CreateDCandBmpBySize(S_Width, S_Height)
BitBlt backDC, 0, 0, S_Width, S_Height, T_DC, T_x, T_y, SRCCOPY
backBitmap = hBitmap
MaskDC = CreateCompatibleDC(0) '1.建立单色mask DC
Maskbitmap = CreateBitmap(S_Width, S_Height, 1, 1, 0)
SelectObject MaskDC, Maskbitmap
SetBkColor ForeDc, TransColor '2.把前景图的背景色设为透明色
BitBlt MaskDC, 0, 0, S_Width, S_Height, ForeDc, 0, 0, SRCCOPY '3.copy前景图到单色DC得到mask
SetBkColor ForeDc, RGB(0, 0, 0) '4.把前景图与mask图作与运算
SetTextColor ForeDc, RGB(255, 255, 255)
BitBlt ForeDc, 0, 0, S_Width, S_Height, MaskDC, 0, 0, SRCAND
SetBkColor backDC, RGB(255, 255, 255) '5.把背景图与mask图作与运算
SetTextColor backDC, RGB(0, 0, 0)
BitBlt backDC, 0, 0, S_Width, S_Height, MaskDC, 0, 0, SRCAND
'6.把前景图和背景图作或运算
BitBlt backDC, 0, 0, S_Width, S_Height, ForeDc, 0, 0, SRCPAINT
BitBlt T_DC, T_x, T_y, S_Width, S_Height, backDC, 0, 0, SRCCOPY
DeleteDC ForeDc: DeleteDC backDC: DelObject ForeBitmap: DelObject backBitmap
DeleteDC MaskDC
DelObject Maskbitmap
End Function
|
|