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

如何在VB中加载PNG格式的图片?,第1张

用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测试通过! 

由于VB中的Image控件和Picture控件都不能直接加载PNG格式图片,使用或浏览PNG格式的图片带来了困难。现行的解决方法主要是以下两种:

(1)利用GDI显示PNG图片;

(2)将PNG格式图片制成swf格式的文件,再用Flash控件显示。

第一种方法效果好,但有些复杂,第二种方法不仅复杂,加载的已不是PNG格式图片了。其实PNG格式图片是能直接在WebBrowser控件里显示的,代码如下:view plaincopy to clipboardprint?

Private Sub Command1_Click()

On Error GoTo ERRLINE

CommonDialog1.ShowOpen

WebBrowser1.Navigate2 CommonDialog1.FileName

ERRLINE:

End Sub

Private Sub Form_Load()

WebBrowser1.Navigate "about:blank"

CommonDialog1.Filter = "PNG图片(*.PNG)|*.PNG"

End Sub

Private Sub Command1_Click()

On Error GoTo ERRLINE

CommonDialog1.ShowOpen

WebBrowser1.Navigate2 CommonDialog1.FileName

ERRLINE:

End Sub

Private Sub Form_Load()

WebBrowser1.Navigate "about:blank"

CommonDialog1.Filter = "PNG图片(*.PNG)|*.PNG"

End Sub

这样就可以随意浏览电脑里的PNG格式的图片了。

vb要显示透明png,gdi+是最好的办法了,它支持半透明。但是,要下载gdiplus.tlb( http://www.vbaccelerator.com/article.asp?id=4588外国网站)并且引用才行。如果引用了gdiplus.tlb ,那么可以使用下面的代码。Private TOKEN As Long

Private Graphics As Long Private Sub InitGDIPlus()

'初始化GDI+

Dim uInput As GdiplusStartupInput

uInput.GdiplusVersion = 1

If GdiplusStartup(TOKEN, uInput) <>Ok Then

'初始化错误

MsgBox "GDI+ 初始化错误。程序即将关闭。", vbCritical, "InitError"

End

End If

GdipCreateFromHDC Me.hDC, Graphics

GdipSetSmoothingMode Graphics, SmoothingModeAntiAlias

End Sub

Private Sub Form_Load()

InitGDIPlusDim image As LongGdipCreateBitmapFromFile "E:\image1.png", image

GdipDrawImage Graphics, image, 0, 0

GdipDisposeImage image

End Sub

Private Sub TerminateGDIPlus()

GdipDeleteGraphics Graphics '释放graphics占用的内存

GdiplusShutdown TOKEN '关闭GDI+

End Sub

Private Sub Form_Unload(Cancel As Integer)

TerminateGDIPlus

End Sub看看flash控件那种完美的半透明效果,谁说做不了,不过我也不懂。哎,如果实在没招,用个flash也不错。


欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/bake/11649050.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2023-05-17
下一篇2023-05-17

发表评论

登录后才能评论

评论列表(0条)

    保存