vb6如何将获取到的byte直接显示在picture上面,而不是下载再去显示。

如何将获取到的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"控件,将其拖动到窗体上。

  1. 给该图片框控件取一个有意义的名称,例如"imgDisplay"。

  2. 修改原有的"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
  1. 添加一个辅助函数"LoadPictureBytes",用于将获取到的字节(byte)转换为图片对象并返回。下面是完整的代码:
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的图像。



【相关推荐】



如果你已经解决了该问题, 非常希望你能够分享一下解决方案, 写成博客, 将相关链接放在评论区, 以帮助更多的人 ^-^