| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1142 人关注过本帖
标题:如何将picture设置为透明的?
只看楼主 加入收藏
jrs123
Rank: 2
等 级:论坛游民
威 望:1
帖 子:627
专家分:14
注 册:2006-9-5
结帖率:94.12%
收藏
 问题点数:0 回复次数:7 
如何将picture设置为透明的?
如何将控件PictureBox的picture设置成透明的?
要用什么代码可以实现?
搜索更多相关主题的帖子: picture PictureBox 控件 代码 
2007-01-18 22:09
dragonfly
Rank: 5Rank: 5
等 级:贵宾
威 望:17
帖 子:1024
专家分:0
注 册:2006-3-20
收藏
得分:0 

2007-01-19 09:10
清澂居士
Rank: 6Rank: 6
等 级:贵宾
威 望:28
帖 子:1237
专家分:7
注 册:2006-12-19
收藏
得分:0 
Private Declare Function TransparentBlt Lib "msimg32.dll" _
(ByVal hdcDest As Long, _
ByVal nXOriginDest As Long, _
ByVal nYOriginDest As Long, _
ByVal nWidthDest As Long, _
ByVal nHeightDest 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

佛曰:\"前世的500次回眸才换来今生的一次擦肩而过\".我宁愿用来世的一次擦肩而过来换得今生的500次回眸.
2007-01-19 11:33
清澂居士
Rank: 6Rank: 6
等 级:贵宾
威 望:28
帖 子:1237
专家分:7
注 册:2006-12-19
收藏
得分:0 
  以前做图形软件时遇到的图片透明问题今天终于找到解决办法了,不敢独想,给大家共享
:放置“透明”的图片
在 VB 中,如果你试着把一只有鸟的图片放到背景的一棵树上,你就会发现树会被鸟遮
住一个矩形的区域(即鸟的图片矩形)。我们可以通过以下方法使图片上非鸟的其它部
分变透明:我们可以利用一个 WinAPI 函数 BitBlt 对图形进行一系列的位操作来达到
此目的。
函数声明:
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)
后记:
1、VB 中的 PaintPicture 方法提供类似功能,但速度不及此方法;
2、在此方法上稍微加入一些代码,就不难实现动画的显示。
3、VB 例子中的 CallDlls 就使用此方法。

佛曰:\"前世的500次回眸才换来今生的一次擦肩而过\".我宁愿用来世的一次擦肩而过来换得今生的500次回眸.
2007-01-19 11:40
清澂居士
Rank: 6Rank: 6
等 级:贵宾
威 望:28
帖 子:1237
专家分:7
注 册:2006-12-19
收藏
得分:0 

Private Declare Function SetLayeredWindowAttributes Lib "User32" (ByVal hwnd As Long, ByVal crKey As Long, ByVal bAlpha As Byte, ByVal dwFlags As Long) As Long

Public Sub NTSetfrmRgn()
'-------------------------------------------------
' 确定窗体形状及透明度
' Color 取得0,0处象素的颜色,即要裁减的区域的颜色
' SetLayeredWindowAttributes 设置透明度及窗体形状
'-------------------------------------------------
Dim WindowExs As Long
Set FormPic = LoadPicture(FormFile) '"pic\test.bmp")
FClock.Picture = FormPic
FClock.Height = ScaleY(FormPic.Height, vbHimetric, vbTwips) '把图像大小的Himetric(0.01毫米)单位变为twips单位
FClock.Width = ScaleX(FormPic.Width, vbHimetric, vbTwips)
Color = GetPixel(FClock.hdc, 0, 0) ' 这里是取图片左上角的象素颜色作为去除色,当然如果只做透明就不用!
WindowExs = GetWindowLong(FClock.hwnd, GWL_EXSTYLE)
WindowExs = WindowExs Or WS_EX_LAYERED
SetWindowLong FClock.hwnd, GWL_EXSTYLE, WindowExs

SetLayeredWindowAttributes FClock.hwnd, Color, 255, LWA_ALPHA Or LWA_COLORKEY '255就是透明度,可以调整!!
End Sub


佛曰:\"前世的500次回眸才换来今生的一次擦肩而过\".我宁愿用来世的一次擦肩而过来换得今生的500次回眸.
2007-01-19 11:49
gelinqu
Rank: 1
等 级:新手上路
帖 子:138
专家分:0
注 册:2005-12-17
收藏
得分:0 
頂一下!
2007-01-19 13:48
zsolong
Rank: 1
等 级:新手上路
威 望:1
帖 子:193
专家分:0
注 册:2006-12-15
收藏
得分:0 
不错~ ~

2007-01-19 14:07
jrs123
Rank: 2
等 级:论坛游民
威 望:1
帖 子:627
专家分:14
注 册:2006-9-5
收藏
得分:0 

不是透明的图片,是透明的控件PictureBox
原因是这样的,在完成了大量的编程工作之后,发现还需要添加PictureBox控件,结果发现这控件挡住了其它控件上的图片,所以要让该控件透明,否则一切都要重新开始.所有编好的图片都要重新来一遍

2007-01-19 20:28
快速回复:如何将picture设置为透明的?
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.040807 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved