|
发表于 2004-8-12 12:56:00
|
显示全部楼层
Re: 再问透明贴图的问题!高手帮忙!
用GDI来实现的话,有几种方法:
1 。 就是用单独的遮罩图。
2。最简单的方法是 用TransparentBlt函数 , 这个函数定义在msimg32.dll中,不过可惜vb自带的api viewer中没有,这需要自己写declare , 如下:
Public Declare Function TransparentBlt Lib "msimg32.dll" (ByVal hdcDest As Long, ByVal nXOriginDest As Long, ByVal nYOriginDest As Long, ByVal nWidthDest As Long, ByVal HeightDest As Long, ByVal hdcSrc As Long, ByVal nXOriginSrc As Long, ByVal nYOriginSrc As Long, ByVal nWidthSrc As Long, ByVal nHeightSrc As Long, ByVal crTransparent As Long) As Long
用法和bitblt相似,最后的crTransparent就是透明色.
3. 比较麻烦一点的,就是用几个Bitblt产生透明效果。参考一下我写的程序:
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
这是截取的一段,如果看不懂,我把类文件放上,自己研究吧。
[em9] |
|