急用这个函数,现在学API恐怕来不及,会的交我下,谢谢! 下面是我网上搜到的透明贴图的问题解决方案,可是我看不懂! 用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
假设我有个width=600,height=1600的BMP格式图,只有红白2色。我想显示时白色区域 是透明的请问该怎么写?请会的麻烦写下急等中。。。。 |