vb.net picturebox 显示图片问题
平头哥哥 2014-06-12 07:01:18 vb中
Public Sub showPicInGDIPlus(Path As String, picCtrl As PictureBox)
Dim Status As Long
Dim token As Long
Dim typGPInput As GdiplusStartupInput
Dim wkPic As PictureBox
Dim Rtn As Long
Dim ImageMode
Rtn = 0
ImageMode = 1
Set wkPic = picCtrl
wkPic.AutoRedraw = True
wkPic.ScaleMode = vbPixels
'GDI+初期化
typGPInput.GdiplusVersion = 1
Status = GdiplusStartup(token, typGPInput)
If Status <> 0 Then
Exit Sub
End If
Dim img As Long
Status = GdipLoadImageFromFile(StrPtr(Path), img)
If Status = 0 Then
wkPic.Cls
Dim G As Long
Status = GdipCreateFromHDC(wkPic.hdc, G)
If Status = 0 Then
Dim mode As InterpolationMode
mode = ImageMode
Status = GdipSetInterpolationMode(G, mode)
If Status <> 0 Then
'Graphics解放
Call GdipDeleteGraphics(G)
'描画
Call GdipDisposeImage(img)
'GDI+後始末処理実施
Call GdiplusShutdown(token)
Exit Sub
End If
'描画
Status = GdipDrawImageRectI(G, img, 0, 0, wkPic.ScaleWidth, wkPic.ScaleHeight)
If Status <> 0 Then
'描画用Graphics解放
Call GdipDeleteGraphics(G)
'描画
Call GdipDisposeImage(img)
'GDI+後始末処理実施
Call GdiplusShutdown(token)
Exit Sub
End If
'描画用Graphics解放
Call GdipDeleteGraphics(G)
End If
wkPic.Refresh
'描画
Call GdipDisposeImage(img)
End If
'GDI+後始末処理実施
Call GdiplusShutdown(token)
On Error GoTo 0
Exit Sub
End Sub
-------------------------------------------------------------------------------------------------------------------------------------------------
以上为vb版本,显示图片没有问题
以下为升级后的vb.net版本(简约版本)
-------------------------------------------------------------------------------------------------------------------------------------------------
Public Sub showPicInGDIPlus(ByRef Path As String, ByRef picCtrl As System.Windows.Forms.PictureBox)
Dim Status As Integer
Dim wkPic As System.Windows.Forms.PictureBox
Dim ImageMode As Integer
wkPic = picCtrl
Dim img As System.Drawing.Image
Dim imgFile_Flg As Boolean
On Error GoTo Error_imgFile
img = System.Drawing.Image.FromFile(Path)
img = wkPic.Image
imgFile_Flg = True
If imgFile_Flg = True Then
Status = 0
PictureBox1.h()
Else
Status = 1
End If
Dim G As Graphics
Dim mode As InterpolationMode
If Status = 0 Then
With wkPic
If Not (.Image Is Nothing) Then
.Image.Dispose()
.Image = Nothing
End If
End With
Dim bmp As Bitmap = New Bitmap(wkPic.ClientSize.Width, wkPic.ClientSize.Height)
G = Graphics.FromImage(bmp)
If Status = 0 Then
mode = ImageMode
G.InterpolationMode = mode
If Status <> 0 Then
'描画用Graphics解放
G.Dispose()
'描画
img.Dispose()
'GDI+後始末処理実施
Exit Sub
End If
G.DrawImage(img, New Point(0, 0))
If Status <> 0 Then
'描画用Graphics解放
G.Dispose()
'描画
img.Dispose()
'GDI+後始末処理実施
Exit Sub
End If
'描画用Graphics解放
G.Dispose()
End If
wkPic.Refresh()
'描画
img.Dispose()
End If
On Error GoTo 0
Exit Sub
Error_imgFile:
imgFile_Flg = False
MsgBox(imgFile_Flg)
Exit Sub
End Sub
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
Call showPicInGDIPlus("C:\" & TextBox1.Text & ".jpg", PictureBox1)
End Sub
End Class
---------------------------------------------------------------------------------------------------------
升级后虽然不报错,可是点了Button1,没有任何反应
求解