| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 4516 人关注过本帖
标题:[求助]如何比较快速地在VB中透明的显示PNG图象
只看楼主 加入收藏
找不到服务器
Rank: 4
等 级:贵宾
威 望:12
帖 子:2937
专家分:1
注 册:2006-8-29
结帖率:33.33%
收藏
 问题点数:0 回复次数:9 
[求助]如何比较快速地在VB中透明的显示PNG图象
请问如何比较快速地在VB中透明的显示PNG图象

搜索更多相关主题的帖子: PNG图象 VB中 
2006-09-09 11:33
找不到服务器
Rank: 4
等 级:贵宾
威 望:12
帖 子:2937
专家分:1
注 册:2006-8-29
收藏
得分:0 
郁闷,怎么没人回
郁闷啊,难道没人会吗?

史上点击数最高的贴
http://bbs.bccn.net/thread-146005-1-1.html
2006-09-10 18:10
liumangtu
Rank: 1
等 级:新手上路
帖 子:2
专家分:0
注 册:2006-9-11
收藏
得分:0 

简单,把png用ps直接改成gif就行了,注:gif也是直接支持透明区域的

2006-09-11 10:23
找不到服务器
Rank: 4
等 级:贵宾
威 望:12
帖 子:2937
专家分:1
注 册:2006-8-29
收藏
得分:0 
[QUOTE]简单,把png用ps直接改成gif就行了,注:gif也是直接支持透明区域的
[/QUOTE]

但是VB不支持GIF透明呀,用GIF方式透明速度和质量都比PNG慢.

史上点击数最高的贴
http://bbs.bccn.net/thread-146005-1-1.html
2006-09-15 21:17
simpson
Rank: 3Rank: 3
等 级:论坛游民
威 望:7
帖 子:863
专家分:17
注 册:2006-11-16
收藏
得分:0 

VB 使用PNG透明格式的图片其实是非常容易的,那就是使用XP以上操作系统中的GDI+库:

需要生命的GDI+的函数:
Private Declare Function GdiplusStartup Lib "gdiplus.dll" ( _
ByRef token As Long, _
ByRef inputX As GdiplusStartupInput, _
ByVal Output As Long _
) As Status

Private Declare Sub GdiplusShutdown Lib "gdiplus.dll" (ByVal token As Long)


Private Declare Function GdipCreateFromHDC Lib "gdiplus.dll" ( _
ByVal hdc As Long, ByRef graphics As Long _
) As Status


Private Declare Function GdipDrawImage Lib "gdiplus.dll" ( _
ByVal graphics As Long, ByVal Image As Long, _
ByVal X As Single, ByVal Y As Single _
) As Status


Private Declare Function GdipLoadImageFromFile Lib "gdiplus.dll" ( _
ByVal FileName As Long, ByRef Image As Long _
) As Status

Private Declare Function GdipDisposeImage Lib "gdiplus.dll" _
(ByVal Image As Long) As Status

需要声明的结构:

Private Type GdiplusStartupInput
GdiplusVersion As Long
DebugEventCallback As Long
SuppressBackgroundThread As Long
SuppressExternalCodecs As Long
End Type

具体做法如下:

Dim m_lngGraphics as long
Dim m_lngInstance as long
Dim m_lngPic as long

Private Sub Form_Load() 'GDI+初始化
Dim udtData As GdiplusStartupInput

Randomize

udtData.GdiplusVersion = 1

If GdiplusStartup(app.hInstance, udtData, 0) Then
MsgBox "GDI+ could not be initialized", vbCritical
Exit Sub
End If

If GdipCreateFromHDC(Me.hdc, m_lngGraphics) Then
MsgBox "Graphics object could not be created", vbCritical
Exit Sub
End If

GdipLoadimagefromfile "c:\1.png" , m_lngPic
GdipImageDraw m_lngGraphics,m_lngPic
End Sub


全国最大的 Java专业电子书免费分享[url]http:///in.asp?id=xrmao[/url]
2007-02-06 21:17
清澂居士
Rank: 6Rank: 6
等 级:贵宾
威 望:28
帖 子:1237
专家分:7
注 册:2006-12-19
收藏
得分:0 
用BITBLT這個強大的API函數和VB中的XOR,即使是JPG,BMP都能設置透明色````

佛曰:\"前世的500次回眸才换来今生的一次擦肩而过\".我宁愿用来世的一次擦肩而过来换得今生的500次回眸.
2007-02-06 21:35
wangyihua819
Rank: 1
等 级:新手上路
帖 子:11
专家分:0
注 册:2006-11-16
收藏
得分:0 
厉害
2007-02-07 14:51
学习VB才2天
Rank: 5Rank: 5
等 级:贵宾
威 望:16
帖 子:1653
专家分:0
注 册:2006-5-4
收藏
得分: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 就使用此方法。

[GLOW=255,DeepPink,3]我的免费网盘[/GLOW]
2007-02-08 10:04
找不到服务器
Rank: 4
等 级:贵宾
威 望:12
帖 子:2937
专家分:1
注 册:2006-8-29
收藏
得分:0 

谢谢楼上的帮助,但总体来说透明的效果不是很好。

图片附件: 游客没有浏览图片的权限,请 登录注册


史上点击数最高的贴
http://bbs.bccn.net/thread-146005-1-1.html
2007-02-08 14:57
virgosoy
Rank: 1
等 级:新手上路
帖 子:2
专家分:5
注 册:2012-10-28
收藏
得分:0 
回复 5楼 simpson
请问Type Status的格式是啥?
2012-10-28 13:17
快速回复:[求助]如何比较快速地在VB中透明的显示PNG图象
数据加载中...
 
   



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

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