如何将获取到的byte直接显示在picture上面,而不是下载再去显示。
Private Sub DownNetFile(ByVal nUrl As String, ByVal cookie As String, ByVal nFile As String) '证书图片下载
Dim b() As Byte
Dim http As Object
Set http = CreateObject("WinHttp.WinHttpRequest.5.1")
http.Open "GET", nUrl, False
http.setrequestheader "Cookie", cookie
http.Send
http.WaitForResponse
Do While http.Status <> 200
DoEvents
Loop
b() = http.ResponseBody
Open nFile For Binary As #1
Put #1, , b()
Close #1
End Sub
Private Sub DownNetFile(ByVal nUrl As String, ByVal cookie As String, ByVal nFile As String) '证书图片下载
Dim b() As Byte
Dim http As Object
Dim fso
Set fso = CreateObject("Scripting.FileSystemObject")
if not fso.FileExists(nFile) then
Set http = CreateObject("WinHttp.WinHttpRequest.5.1")
http.Open "GET", nUrl, False
http.setrequestheader "Cookie", cookie
http.Send
http.WaitForResponse
Do While http.Status <> 200
DoEvents
Loop
b() = http.ResponseBody
Open nFile For Binary As #1
Put #1, , b()
Close #1
else
Open nFile For Binary As #1
Get #1, , b()
Close #1
endif
End Sub
引用 皆我百晓生 小程序回复内容作答:
在VB6中,你可以使用IPictureDisp接口来将获取到的字节数据直接显示在PictureBox上。以下是一个示例代码:
Private Declare Function OleLoadPicture Lib "olepro32.dll" ( _
ByVal lpStream As IUnknown, ByVal lSize As Long, _
ByVal fRunmode As Long, ByRef riid As Any, _
ByRef lpii As Any) As Long
Private Sub DisplayImage(ByVal b() As Byte, ByVal picBox As PictureBox)
Dim stream As IStream
Dim picture As stdole.IPictureDisp
' 将字节数据转换为IStream对象
Set stream = CreateStreamOnHGlobal(0, True)
stream.Write b(0), UBound(b) + 1, 0
Call stream.Seek(0, STREAM_SEEK_SET, 0)
' 使用OleLoadPicture函数从IStream中加载图片
Dim iid As GUID
Dim lpii As IPictureDisp
iid.Data1 = &H7BF80980
iid.Data2 = &HBF32
iid.Data3 = &H101A
iid.Data4(0) = &H8B
iid.Data4(1) = &HBB
iid.Data4(2) = &H0
iid.Data4(3) = &HAA
iid.Data4(4) = &H0
iid.Data4(5) = &H30
iid.Data4(6) = &HC
iid.Data4(7) = &HAB
OleLoadPicture stream, 0, 0, iid, picture
' 在PictureBox控件上显示图片
picBox.Picture = picture
End Sub
你可以调用上述的DisplayImage方法来显示从网络上获取到的字节数据:
Private Sub DownNetFile(ByVal nUrl As String, ByVal cookie As String, ByVal nFile As String)
Dim b() As Byte
Dim http As Object
Set http = CreateObject("WinHttp.WinHttpRequest.5.1")
http.Open "GET", nUrl, False
http.setrequestheader "Cookie", cookie
http.Send
http.WaitForResponse
Do While http.Status <> 200
DoEvents
Loop
b() = http.ResponseBody
' 显示图片
DisplayImage b(), Picture1
End Sub
请确保已在项目引用中添加了"Microsoft ActiveX Data Objects 6.1 Library" 和 "Microsoft Windows Common Controls 6.0 (SP6)"这两个库。
【以下回答由 GPT 生成】
问题描述: 如何在VB6中将获取到的字节(byte)直接显示在图片框上,而不是先下载到本地再显示?
解决方案: 1. 首先,我们需要在VB6界面上放置一个图片框控件来显示图片。在VB6的工具箱中找到"Image"控件,将其拖动到窗体上。
给该图片框控件取一个有意义的名称,例如"imgDisplay"。
修改原有的"DownNetFile"过程,在获取到字节(byte)后直接将其赋值给图片框的Picture属性。下面是修改后的代码:
Private Sub DownNetFile(ByVal nUrl As String, ByVal cookie As String)
Dim http As Object
Set http = CreateObject("WinHttp.WinHttpRequest.5.1")
http.Open "GET", nUrl, False
http.setrequestheader "Cookie", cookie
http.Send
http.WaitForResponse
Do While http.Status <> 200
DoEvents
Loop
Set imgDisplay.Picture = LoadPictureBytes(http.ResponseBody)
End Sub
Private Sub DownNetFile(ByVal nUrl As String, ByVal cookie As String)
Dim http As Object
Set http = CreateObject("WinHttp.WinHttpRequest.5.1")
http.Open "GET", nUrl, False
http.setrequestheader "Cookie", cookie
http.Send
http.WaitForResponse
Do While http.Status <> 200
DoEvents
Loop
Set imgDisplay.Picture = LoadPictureBytes(http.ResponseBody)
End Sub
Private Function LoadPictureBytes(ByVal bytes() As Byte) As StdPicture
Dim stream As Object
Set stream = CreateObject("ADODB.Stream")
stream.Type = 1 'adTypeBinary
stream.Open
stream.Write bytes
stream.Position = 0
Set LoadPictureBytes = LoadPicture(stream.Read)
stream.Close
End Function
现在,当您调用"DownNetFile"过程并传入正确的URL和Cookie时,该图片框将直接显示来自URL的图像。
【相关推荐】