
用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 LongPrivate 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也不错。
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)