vb6.0 bitblt图片控件怎么都变黑了
函数声明:DeclareFunctionBitBltLib"gdi32"Alias"BitBlt"(ByValhDestDCAsLong,ByValxAsLong,ByV...
函数声明:
Declare Function BitBlt Lib "gdi32" Alias "BitBlt" (ByVal hDestDC As Long, ByVal x As Long, ByVal y As Long, ByVal nWidth As Long, ByVal nHeight As Long, ByVal hSrcDC As Long, ByVal xSrc As Long, ByVal ySrc As Long, ByVal dwRop As Long) As Long
参数解释:
目标环境:hDestDC——目标设备环境;x——左上角;y——顶端;nWidth——宽;nHeight——高
源环境:hSrcDC——源设备环境;xSrc——源左上角;ySrc——源顶端;
dwRop——位处理操作,如 vbSrcAnd;vbSrcAnd;vbSrcCopy;vbSrcErase;vbSrcInvert 等
(目标环境或源环境只能是 Picture, Form 或 Printer 对象。各单位为象素。)
进行处理之前,我们需要对鸟的图片进行处理:先复制一份相同的图形,将其应该透明之处(鸟的背景)设置为黑色(设此图为sPic),再将另一图做以下处理:要复制的地方(鸟)设置为黑色,其余地方设置(鸟的背景)为白色(设此图为Mask)。设树的图形为名dPic。
最后,请加入以下代码:
R=BitBlt(dPic.hdc,0,0,sPic.Width,sPic.Height,Mask.hdc,0,0,vbScrCopy)
R=BitBlt(dPic.hdc,0,0,sPic.Width,sPic.Height,sPic.hdc,0,0,vbScrInvert)
==========
我照着上述的方法调试,但是点击按钮,加载树的控件变成黑的了
请高手帮我解决,谢谢
用了你们的方法还是不行 谁能把这个例子的源代码给我 谢谢 万分感谢 展开
Declare Function BitBlt Lib "gdi32" Alias "BitBlt" (ByVal hDestDC As Long, ByVal x As Long, ByVal y As Long, ByVal nWidth As Long, ByVal nHeight As Long, ByVal hSrcDC As Long, ByVal xSrc As Long, ByVal ySrc As Long, ByVal dwRop As Long) As Long
参数解释:
目标环境:hDestDC——目标设备环境;x——左上角;y——顶端;nWidth——宽;nHeight——高
源环境:hSrcDC——源设备环境;xSrc——源左上角;ySrc——源顶端;
dwRop——位处理操作,如 vbSrcAnd;vbSrcAnd;vbSrcCopy;vbSrcErase;vbSrcInvert 等
(目标环境或源环境只能是 Picture, Form 或 Printer 对象。各单位为象素。)
进行处理之前,我们需要对鸟的图片进行处理:先复制一份相同的图形,将其应该透明之处(鸟的背景)设置为黑色(设此图为sPic),再将另一图做以下处理:要复制的地方(鸟)设置为黑色,其余地方设置(鸟的背景)为白色(设此图为Mask)。设树的图形为名dPic。
最后,请加入以下代码:
R=BitBlt(dPic.hdc,0,0,sPic.Width,sPic.Height,Mask.hdc,0,0,vbScrCopy)
R=BitBlt(dPic.hdc,0,0,sPic.Width,sPic.Height,sPic.hdc,0,0,vbScrInvert)
==========
我照着上述的方法调试,但是点击按钮,加载树的控件变成黑的了
请高手帮我解决,谢谢
用了你们的方法还是不行 谁能把这个例子的源代码给我 谢谢 万分感谢 展开
4个回答
展开全部
你是想做透明色吧。
首先光栅化参数就不对,应该用vbSrcAnd和vbSrcPaint两次绘制。而不是什么VbSrcCopy。另外注意:是“Src”不是“Scr”
其次要保证源图的AutoRedraw属性为True,否则Blt出来的图像不是真正的图像。
下来,如果你想要用sPic.Height这种代码的话,你需要保证其单位是象素,VB中默认是Twip,这个肯定是错的,需要将其父控件的ScaleMode改为Pixel。
最后,做透明色GDI中有更好API,TransparentBlt,比两次BitBlt方便很多,效果也好。
还有问题话请留邮箱。
首先光栅化参数就不对,应该用vbSrcAnd和vbSrcPaint两次绘制。而不是什么VbSrcCopy。另外注意:是“Src”不是“Scr”
其次要保证源图的AutoRedraw属性为True,否则Blt出来的图像不是真正的图像。
下来,如果你想要用sPic.Height这种代码的话,你需要保证其单位是象素,VB中默认是Twip,这个肯定是错的,需要将其父控件的ScaleMode改为Pixel。
最后,做透明色GDI中有更好API,TransparentBlt,比两次BitBlt方便很多,效果也好。
还有问题话请留邮箱。
展开全部
R=BitBlt(dPic.hdc,0,0,sPic.Width,sPic.Height,Mask.hdc,0,0,vbSrcAnd)
R=BitBlt(dPic.hdc,0,0,sPic.Width,sPic.Height,sPic.hdc,0,0,vbSrcPaint)
这样就OK了.
R=BitBlt(dPic.hdc,0,0,sPic.Width,sPic.Height,sPic.hdc,0,0,vbSrcPaint)
这样就OK了.
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
sPic.Width改成sPic.ScaleWidth,其他的同
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
参数 不对 你不会用 ,要是把分给我 我保证 给你源码 一目了然 呵呵 我QQ271072330
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询