可先创建一个二进制文件,然后把byte数组写入,改文件名为*.bmp 再用picbox读出

解决方案 »

  1.   

    但是如果我的图片格式不是bmp如何是好。
    而且写入文件也太麻烦了,有别的方法吗
      

  2.   

    这涉及到流的方式读取,可能用DX技术可以解决,我对dX不太熟,再学
      

  3.   

    dx资料我也没有,只有他的sdk,15.2M,全是洋码,看着累
    不过还是不错。
      

  4.   

    谁的贴子介绍过,我记不得了他的名字了,可能是(巴顿)显示数组中的图片
    'Module1Option 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 Sub MoveMemory Lib "kernel32" Alias "RtlMoveMemory" (pDest As Any, pSource As Any, ByVal dwLength As Long)Public Function LoadFile(ByVal FileName As String) As Byte()
        Dim FileNo As Integer, b() As Byte
        On Error GoTo Err_Init
        If Dir(FileName, vbNormal Or vbArchive) = "" Then
            Exit Function
        End If
        FileNo = FreeFile
        Open FileName For Binary Access Read As #FileNo
        ReDim b(0 To LOF(FileNo) - 1)
        Get #FileNo, , b
        Close #FileNo
        LoadFile = b
        Exit Function
    Err_Init:
        MsgBox Err.Number & " - " & Err.Description
    End FunctionPublic Function PictureFromByteStream(b() As Byte) As IPicture
        Dim LowerBound As Long
        Dim ByteCount  As Long
        Dim hMem  As Long
        Dim lpMem  As Long
        Dim IID_IPicture(15)
        Dim istm As stdole.IUnknown    On Error GoTo Err_Init
        If UBound(b, 1) < 0 Then
            Exit Function
        End If
        
        LowerBound = LBound(b)
        ByteCount = (UBound(b) - LowerBound) + 1
        hMem = GlobalAlloc(&H2, ByteCount)
        If hMem <> 0 Then
            lpMem = GlobalLock(hMem)
            If lpMem <> 0 Then
                MoveMemory ByVal lpMem, b(LowerBound), ByteCount
                Call GlobalUnlock(hMem)
                If CreateStreamOnHGlobal(hMem, 1, istm) = 0 Then
                    If CLSIDFromString(StrPtr("{7BF80980-BF32-101A-8BBB-00AA00300CAB}"), IID_IPicture(0)) = 0 Then
                      Call OleLoadPicture(ByVal ObjPtr(istm), ByteCount, 0, IID_IPicture(0), PictureFromByteStream)
                    End If
                End If
            End If
        End If
        
        Exit Function
        
    Err_Init:
        If Err.Number = 9 Then
            'Uninitialized array
            MsgBox "You must pass a non-empty byte array to this function!"
        Else
            MsgBox Err.Number & " - " & Err.Description
        End If
    End Function
      

  5.   

    可以给我吗,或者告诉我哪里下的
    谢谢了
    我的信箱
    [email protected]
      

  6.   

    'form1
    Option ExplicitPrivate Declare Function CreateCompatibleDC Lib "gdi32" (ByVal hdc As Long) As Long
    Private Declare Function SelectObject Lib "gdi32" (ByVal hdc As Long, ByVal hObject As Long) As Long
    Private Declare Function DeleteDC Lib "gdi32" (ByVal hdc As Long) As Long
    Private Declare Function BitBlt Lib "gdi32" (ByVal hDestDC As Long, ByVal x As Long, ByVal y As Long, ByVal nWidth As Long, ByVal nHeight As Long, ByVal hSrcDC As Long, ByVal xSrc As Long, ByVal ySrc As Long, ByVal dwRop As Long) As Long
    Private Declare Function GetObject Lib "gdi32" Alias "GetObjectA" (ByVal hObject As Long, ByVal nCount As Long, lpObject As Any) As Long
    Private Type BITMAP
            bmType As Long
            bmWidth As Long
            bmHeight As Long
            bmWidthBytes As Long
            bmPlanes As Integer
            bmBitsPixel As Integer
            bmBits As Long
    End TypePrivate Sub Form_Load()
        Dim b() As Byte, pic As StdPicture, DrawDirectlyOnForm As Boolean
        
        AutoRedraw = True
        DrawDirectlyOnForm = False
        
        'Load a picture into the byte array
        b = LoadFile(App.Path & "\full color.jpg")
        
        'Create a StdPicture object (bitmap object) from the bytestream
        Set pic = PictureFromByteStream(b)
        If pic Is Nothing Then
            MsgBox "Unable to load bitmap! Check filename"
            Exit Sub
        End If
        
        'Now, there are two ways to display the picture. You can either:
        If DrawDirectlyOnForm = True Then
            'Assign it directly to the picture property of the form
            Set Me.Picture = pic
        Else
            'Or select it into a DC and do other manipulations to it
            DoItTheHardWay pic
        End If    'Destroy it when you're done.
        Set pic = Nothing
        
    End SubPrivate Sub DoItTheHardWay(ByRef pic As StdPicture)
        Dim TempDC As Long, hBmp As Long, w As Long, h As Long, bmpInfo As BITMAP
        
        'Determine the width and height of the bitmap
        GetObject pic.Handle, Len(bmpInfo), bmpInfo
        w = bmpInfo.bmWidth
        h = bmpInfo.bmHeight
        
        'Create a DC compatible with the bitmap
        TempDC = CreateCompatibleDC(0)
        
        'Select the bitmap into it
        hBmp = SelectObject(TempDC, pic.Handle)
        
        'Blit it to the form
        BitBlt Me.hdc, 0, 0, w, h, TempDC, 0, 0, vbSrcCopy
        
        'Clean up
        hBmp = SelectObject(TempDC, hBmp)
        DeleteDC TempDCEnd Sub
      

  7.   

    他用的函数好像有问题GlobalAlloc