我把图片读成了二进制数组后,现在想在picturebox里显示这个图片
当然不能把图片保存为外存文件再loadpicture,那样效率实在太低
现在我想直接利用这个二进制数组,把图片显示到picturebox中,应该怎么办,高手指教!
当然不能把图片保存为外存文件再loadpicture,那样效率实在太低
现在我想直接利用这个二进制数组,把图片显示到picturebox中,应该怎么办,高手指教!
解决方案 »
- 很简单的一个问题,在线等答案加分拉
- 高手进来:请教如何在VB中操作Spatial数据
- 请问怎么给图片框加滚动条以能看图片的不同部分。希望给出代码
- vbscript调用COM函数的返回值,无法访问数组内容,头疼阿,各位大侠请出手
- 急,在线等待,如何删除一个目录下的所有子目录及文件,不有FileSystemObject?
- 帮我解决一下吧。我想在窗体上放一个控件,然后拖动这个控件窗体被就被拖动了。大家告诉我怎么做好吗?
- 在打印完成时总是多走一页空白纸啊!!! 怎么解决!!!!??????????
- VB的学生宿舍管理系统
- VB 与 Labview 结合用于控制实用吗?有哪些优点?谁调用谁比较好?
- 请问如何把当前的鼠标指针保存为BMP文件?
- 高分求共享软件中英文版权声明模板
- VB中修改时间的问题!急急急急!
如果你后面的处理代码在执行,那么表示LoadPicture已经加载好图片了~
多线程?
如果是位图的话还比较好处理,Gif或者jpg的话就..............
Option ExplicitPrivate Declare Function CreateStreamOnHGlobal Lib "ole32" (ByVal hGlobal As Long, ByVal fDeleteOnRelease As Long, ppstm As Any) As Long
Private Declare Function OleLoadPicture Lib "olepro32" (pStream As Any, ByVal lSize As Long, ByVal fRunmode As Long, riid As Any, ppvObj As Any) As Long
Private Declare Function CLSIDFromString Lib "ole32" (ByVal lpsz As Any, pclsid As Any) As Long
Private Declare Function GlobalAlloc Lib "kernel32" (ByVal uFlags As Long, ByVal dwBytes As Long) As Long
Private Declare Function GlobalLock Lib "kernel32" (ByVal hMem As Long) As Long
Private Declare Function GlobalUnlock Lib "kernel32" (ByVal hMem As Long) As Long
Private Declare Function GlobalFree Lib "kernel32" (ByVal hMem As Long) As Long
Private Declare Sub CopyMemory Lib "kernel32" Alias "RtlMoveMemory" (Destination As Any, Source As Any, ByVal Length As Long)
Private Const GMEM_ZEROINIT = &H40 Private Function GetPictureFromByteStream(bImageData() As Byte) As IPicture
Dim lngByteCount As Long
Dim hMem As Long
Dim lpMem As Long
Dim IID_IPicture(15)
Dim IStream As stdole.IUnknown On Error GoTo Err_Init
lngByteCount = UBound(bImageData) + 1 ' 计算数组大小
hMem = GlobalAlloc(&H2 Or GMEM_ZEROINIT, lngByteCount) ' 按数组大小分配一块内存空间
If hMem <> 0 Then
' 若分配内存成功
lpMem = GlobalLock(hMem) ' 锁定内存, 返回第一块的指针
If lpMem <> 0 Then
CopyMemory ByVal lpMem, bImageData(0), lngByteCount
Call GlobalUnlock(hMem)
If CreateStreamOnHGlobal(hMem, 1, IStream) = 0 Then
If CLSIDFromString(StrPtr("{7BF80980-BF32-101A-8BBB-00AA00300CAB}"), IID_IPicture(0)) = 0 Then
Call OleLoadPicture(ByVal ObjPtr(IStream), lngByteCount, 0, IID_IPicture(0), GetPictureFromByteStream)
End If
End If
End If
End If
GlobalFree hMem Exit Function Err_Init:
MsgBox Err.Number & " - " & Err.Description
End Function Private Sub Command1_Click()
Dim bytData() As Byte
Dim f As String
Dim Fn As Integer
f = App.Path & "\p.jpg"
If Dir(f) = "" Then
MsgBox "File not found"
Exit Sub
End If
Fn = FreeFile
Open f For Binary As #Fn
ReDim bytData(LOF(1) - 1)
Get #Fn, , bytData
Close #Fn
Set Picture1.Picture = GetPictureFromByteStream(bytData())
End Sub