如何在VB中加载PNG格式的图片?

我要做一个VB程序,需要背景透明的图片,通过PS我可以搞定图片,但是GIF会失真,所以只能用PNG,但是VB中又不能直接加载PNG格式的,怎么办???请各位高手帮忙想想办... 我要做一个VB程序,需要背景透明的图片,通过PS我可以搞定图片,但是GIF会失真,所以只能用PNG,但是VB中又不能直接加载PNG格式的,怎么办???请各位高手帮忙想想办法!!!!!! 展开
 我来答
149005501
推荐于2016-04-10 · TA获得超过8.6万个赞
知道顶级答主
回答量:7.9万
采纳率:90%
帮助的人:1.3亿
展开全部

用GDI函数,给你一个示例吧,显示PNG到FORM上,用GDI的:

'GDI+API函数
Private Declare Function GdiplusStartup Lib "gdiplus" (token As Long, inputbuf As GdiplusStartupInput, Optional ByVal outputbuf As Long = 0) As GpStatus
Private Declare Sub GdiplusShutdown Lib "gdiplus" (ByVal token As Long)
Private Declare Function GdipCreateFromHDC Lib "gdiplus" (ByVal hwnd As Long, graphics As Long) As GpStatus
Private Declare Function GdipDeleteGraphics Lib "gdiplus" (ByVal graphics As Long) As GpStatus
Private Declare Function GdipDrawImageRect Lib "gdiplus" (ByVal graphics As Long, ByVal image As Long, ByVal x As Single, ByVal y As Single, ByVal Width As Single, ByVal Height As Single) As GpStatus
Private Declare Function GdipLoadImageFromFile Lib "gdiplus" (ByVal filename As String, image As Long) As GpStatus
Private Declare Function GdipGetImageWidth Lib "gdiplus" (ByVal image As Long, Width As Long) As GpStatus
Private Declare Function GdipGetImageHeight Lib "gdiplus" (ByVal image As Long, Height As Long) As GpStatus
Private Declare Function GdipDisposeImage Lib "gdiplus" (ByVal image As Long) As GpStatus
'变量结构定义
Private Type GdiplusStartupInput
    GdiplusVersion As Long
    DebugEventCallback As Long
    SuppressBackgroundThread As Long
    SuppressExternalCodecs As Long
End Type
Private Enum GpStatus
    Ok = 0
    GenericError = 1
    InvalidParameter = 2
    OutOfMemory = 3
    ObjectBusy = 4
    InsufficientBuffer = 5
    NotImplemented = 6
    Win32Error = 7
    WrongState = 8
    Aborted = 9
    FileNotFound = 10
    ValueOverflow = 11
    AccessDenied = 12
    UnknownImageFormat = 13
    FontFamilyNotFound = 14
    FontStyleNotFound = 15
    NotTrueTypeFont = 16
    UnsupportedGdiplusVersion = 17
    GdiplusNotInitialized = 18
    PropertyNotFound = 19
    PropertyNotSupported = 20
End Enum

'主要代码就下面这几句而已.
Private Const c_pngPath As String = "C:\1.png"  '要显示的图片名称和路径。
Dim m_token As Long
Private Sub Form_paint() '在Form上显示
     Dim pImg As Long '定义变量
     Dim pGraphics As Long
     Dim w As Long, h As Long
    '先找指定控件ID,然后通过GDI将PNG内容画上...
     Call GdipCreateFromHDC(Me.hDC, pGraphics)
     Call GdipLoadImageFromFile(StrConv(c_pngPath, vbUnicode), pImg)
     Call GdipGetImageWidth(pImg, w)
     Call GdipGetImageHeight(pImg, h)
     Call GdipDrawImageRect(pGraphics, pImg, 0, 0, w, h)
     Call GdipDisposeImage(pImg)
     Call GdipDeleteGraphics(pGraphics)
End Sub
Private Sub Form_Load()
     Dim StartupInput As GdiplusStartupInput
     StartupInput.GdiplusVersion = 1
     If GdiplusStartup(m_token, StartupInput, ByVal 0) Then
             MsgBox "Error initializing GDI+"
             Exit Sub
     End If
End Sub
Private Sub Form_Unload(Cancel As Integer)
     Call GdiplusShutdown(m_token)
End Sub

运行结果:

本机XP+VB6测试通过! 

百度网友2d78d53c0
2007-08-07 · TA获得超过892个赞
知道小有建树答主
回答量:181
采纳率:0%
帮助的人:0
展开全部
楼上那个装载PNG图片的代码太慢```
我觉得应该把PNG做进Flash里导出SWF,然后在VB里用Flash控件装载,再把Flash控件的WMode属性设置为Transparent,这样Flash控件的背景就透明了。
效果还是不错的。
本回答被提问者采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
怀胜城识
2019-03-09 · TA获得超过1186个赞
知道小有建树答主
回答量:1375
采纳率:100%
帮助的人:6.2万
展开全部
假设你的图片的路径是c:\1.png
在form的load事件中写上
me.picture=loadpicture("c:\1.png")
就可以了,这是直接加载到窗体的,不需要picturebox控件。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
wangtk1982
2007-08-06 · TA获得超过3742个赞
知道大有可为答主
回答量:3206
采纳率:100%
帮助的人:1415万
展开全部
程序里面用透明图片肯定是考程序透空~直接用图片是最差的选择~

图片透空的方法 就是bltbit画出来~
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
百度网友a7cb9e4ff
2007-08-06 · TA获得超过116个赞
知道小有建树答主
回答量:330
采纳率:100%
帮助的人:318万
展开全部
VB没有现成的控件来装载该类型的图片。

不过下面的代码你可以装载PNG图片。

http://www.mndsoft.com/blog/article.asp?id=201
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(5)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式