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,没有任何反应

求解
...全文
474 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
平头哥哥 2014-06-12
  • 打赏
  • 举报
回复
引用 2 楼 xxxxing 的回复:
[quote=引用 1 楼 wind_cloud2011 的回复:] PictureBox1.h()这是啥?不会出错?是不是 PictureBox1.Hide()? 代码有错,都返回false
不好意思,这句话应该是 注释掉的 [/quote] そうですれ
wind_cloud2011 2014-06-12
  • 打赏
  • 举报
回复
少了 PictureBox1.Image = bmp
平头哥哥 2014-06-12
  • 打赏
  • 举报
回复
引用 1 楼 wind_cloud2011 的回复:
PictureBox1.h()这是啥?不会出错?是不是 PictureBox1.Hide()? 代码有错,都返回false
不好意思,这句话应该是 注释掉的
wind_cloud2011 2014-06-12
  • 打赏
  • 举报
回复
PictureBox1.h()这是啥?不会出错?是不是 PictureBox1.Hide()? 代码有错,都返回false

16,554

社区成员

发帖
与我相关
我的任务
社区描述
VB技术相关讨论,主要为经典vb,即VB6.0
社区管理员
  • VB.NET
  • 水哥阿乐
  • 无·法
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧