[求助]把图像数据读入数组,如何显示该图像
vb吧
全部回复
仅看楼主
level 7
把图像数据读入数组,不通过磁盘文件操作,如果直接将该数组显示为图像,求高手助我啊
2011年11月08日 09点11分 1
吧务
level 12
PropertyBag
2011年11月09日 00点11分 2
level 13
ole
2011年11月09日 01点11分 3
level 7
豆子哥...看到你真激动啊...能详解否...
2011年11月09日 01点11分 5
level 13
Private Enum CBoolean
  CFalse = 0
    CTrue = 1
End Enum
Private Const S_OK = 0
Private Declare Function CreateStreamOnHGlobal Lib "ole32" (ByVal hGlobal As Long, ByVal fDeleteOnRelease As CBoolean, ppstm As Any) As Long
Private Declare Function OleLoadPicture Lib "olepro32" (pStream As Any, ByVal lSize As Long, ByVal fRunmode As CBoolean, riid As GUID, ppvObj As Any) As Long
Private Type GUID
    dwData1 As Long
    wData2  As Integer
    wData3  As Integer
    abData4(7)                  As Byte
End Type
Private Declare Function CLSIDFromString Lib "ole32" (ByVal lpsz As Any, pclsid As GUID) As Long
Private Const sIID_IPicture = "{7BF80980-BF32-101A-8BBB-00AA00300CAB}"
Private Const GMEM_MOVEABLE = &H2
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 MoveMemory Lib "kernel32" Alias "RtlMoveMemory" (pDest As Any, pSource As Any, ByVal dwLength As Long)
Private Function PictureFromBits(abPic() As Byte) As IPicture
    Dim nLow         As Long
    Dim cbMem        As Long
    Dim hMem         As Long
    Dim lpMem        As Long
    Dim IID_IPicture As GUID
    Dim istm         As stdole.IUnknown
    Dim ipic         As IPicture
    On Error GoTo Out
    nLow = LBound(abPic)
    On Error GoTo 0
    cbMem = (UBound(abPic) - nLow) + 1
    hMem = GlobalAlloc(GMEM_MOVEABLE, cbMem)                                    '分配可移动的内存
    If hMem Then
        lpMem = GlobalLock(hMem)
        If lpMem Then
            MoveMemory ByVal lpMem, abPic(nLow), cbMem
            Call GlobalUnlock(hMem)
            If (CreateStreamOnHGlobal(hMem, CTrue, istm) = S_OK) Then
                If (CLSIDFromString(StrPtr(sIID_IPicture), IID_IPicture) = S_OK) Then
                    Call OleLoadPicture(ByVal ObjPtr(istm), cbMem, CFalse, IID_IPicture, PictureFromBits)
                End If
            End If
        End If
    End If
Out:
End Function
2011年11月09日 02点11分 6
1