transparentblt(transparentblt函数)

http://www.itjxue.com  2023-02-21 06:57  来源:未知  点击次数: 

谁能说说在VB6.0中使用GdiTransparentBlt函数?

绘图时使某一个颜色值透明 此示例是过滤纯白颜色

Private Declare Function GdiTransparentBlt Lib "gdi32" (ByVal hdc1 As Long, ByVal X1 As Long, ByVal Y1 As Long, ByVal W1 As Long, ByVal H1 As Long, ByVal Hdc2 As Long, ByVal X2 As Long, ByVal Y2 As Long, ByVal W2 As Long, ByVal H2 As Long, ByVal Color As Long) As Long

Private Sub Command1_Click()

GdiTransparentBlt Me.hDC, 0, 0, Picture1.ScaleWidth, Picture1.ScaleHeight, _

Picture1.hDC, 0, 0, Picture1.ScaleWidth, Picture1.ScaleHeight, RGB(255, 255, 255)

Me.Refresh

End Sub

Private Sub Form_Load()

Me.AutoRedraw = True

Me.ScaleMode = 3

Picture1.AutoRedraw = True

Picture1.ScaleMode = 3

End Sub

vb中GdiTransparentBlt这个API怎么用

Private Declare Function GdiTransparentBlt Lib "gdi32" (ByVal hdc1 As Long, ByVal X1 As Long, ByVal Y1 As Long,ByVal W1 As Long, ByVal H1 As Long, ByVal Hdc2 As Long, ByVal X2 As Long, ByVal Y2 As Long, ByVal W2 As Long, ByVal H2 As Long, ByVal Color As Long) As Long

Private Sub Form_Load()

GdiTransparentBlt Me.hDC, 0, 0, Picture1.ScaleWidth, Picture1.ScaleHeight, Picture1.hDC, 0, 0, Picture1.ScaleWidth, Picture1.ScaleHeight, HFF00FF

End Sub

C++ TransparentBlt 问题

你错误信息呢?贴代码别人只能肉眼编译了:)

至少一点是错误的,RGB(0,0,0)是不能作为它最后一个参数的,你需要选择其他颜色。但是这不会导致编译错误

请教函数TransparentBlt的用法

函数功能:该函数对指定的源设备环境中的矩形区域像素的颜色数据进行位块(bit_block)转换,并将结果置于目标设备环境。

函数原型:BOOL TransparentBlt(HDC hdcDest, int nXOriginDest, int nYOriginDest, int nWidthDest, int hHeightDest, HDC hdcSrc, int nXOriginSrc, int nYOriginSrc, int nWidthSrc, int nHeightSrc, UINT crTransparent);

参数:

nXOriginDest:指定目标矩形左上角的X轴坐标,坐标以逻辑单位表示。

nYOriginDest:指定目标矩形左上角的Y轴坐标,坐标以逻辑单位表示。

nHeightDest:指定目标矩形的高度。

nXOriginSrc:指定源矩形(左上角)的X轴坐标,坐标以逻辑单位表示。

nYOriginsrc:指定源矩形(左上角)的Y轴坐标,坐标以逻辑单位表示。

nWidthSrc:指定源矩形的宽度。

nHeightSrc:指定源矩形的高度。

crTransparent:源位图中的RGB值当作透明颜色。(用RGB(0,0,0)也就是黑色不行)返回值:如果函数执行成功,那么返回值为TRUE;如果函数执行失败,那么返回值为FALSE。

Windows NT:若想获取更多错误信息,请调用GetLastError函数。

备注:函数TransparentBlt支持4位/像素和8位/像素格式的源位图,使用AlphaBlend可以指定带有透明度的32位/像素格式的位图。如果源和目标矩形的大小不一致,那么将对源位图进行拉伸以与目标矩形匹配,当使用SetStretchBltMode函数时,BLACKONWHITE和WHITEONBLACK两种iStretchMode模式将被转换成TransparentBlt函数的COLORONCOLOR模式。目标设备环境指定了用于目标坐标的变换类型,而源设备环境指定了源坐标使用的变换类型。如果源位图或目标位图的宽度或高度是负数,那么TransparentBlt函数也不对位图进行镜像。

速查:Windows NT:5.0及以上版本;Windows:98及以上版本;Windows CE:Windows CE .NET 4.0 and later;头文件:wingdi.h:库文件:作为一个资源包含在msimg32.dll中。

求助有人用过c++ CXimage 这个库没 ?怎么对一个bmp图片或者是gif图片进行透明处理?

bmp图像是没有alpha(透明)通道的,如果想要对bmp图像进行镂空或者半透明显示,需要先获取背景图像的颜色信息数组,然后计算背景图像数组与bmp图像的颜色数组的相对矩形区域,并在该矩形区域内把相应的像素点的附加透明度的最终像素颜色给计算出来,然后作为一个新的位图进行贴图。如果是完全透明(也就是镂空)效果,你可以选择一种不常用的颜色作为镂空色,在bmp素材中,需要镂空的地方处理成那种颜色,然后使用win gdi提供的transparentblt这个API就能在贴图的时候自动过滤掉该颜色了。

gif图像自带bool型alpha通道(也就是是否镂空),我没有用过CxImage库,不知道它是否提供了直接到windows窗体或设备的自动处理透明的贴图方式。如果只是单纯的图像文件解码而不是设备API的话,解码后对图像颜色数组按照上述bmp颜色数组的处理方法也可以达到效果。

希望对撸主有帮助

(PS: 求撸主把CxImage库发我一份)

(责任编辑:IT教学网)

更多

推荐CMS技巧文章