想要的到 一个Picture对象里面的二进制流数据 ,这个数据直接拿到c#里面能保存成图片.
现在用GetBitmapBits取到了像素的数据, 但是没有头信息的数据, 请各位大侠帮忙, 谢谢

解决方案 »

  1.   

    如果需要全部的文件数据 为什么不把图象保存在本地呢 用binary打开 得到的不是包含文件头的二进制流数据吗?
      

  2.   

    调用用 SavePicture 把Picture对象的内容保存到本地文件,你要的什么信息都有了。
      

  3.   

    ActiveX 不方便保存在本地, 要在内存完成
      

  4.   

    Private Declare Function GetObject Lib "gdi32" Alias "GetObjectA" (ByVal hObject As Long, ByVal nCount As Long, lpObject As Any) As Long
    Private Const OBJ_BITMAP = 7
    Private Type BITMAP '14 bytes
            bmType As Long
            bmWidth As Long
            bmHeight As Long
            bmWidthBytes As Long
            bmPlanes As Integer
            bmBitsPixel As Integer
            bmBits As Long
    End TypeSub GetBmpInfo()
        Dim bmp As BITMAP
        
        GetObject Me.Picture.Handle, Len(bmp), bmp
    End Sub
    BITMAP结构里已包含图像的所有信息了。
      

  5.   

    Private Declare Function GetObject Lib "gdi32" Alias "GetObjectA" (ByVal hObject As Long, ByVal nCount As Long, lpObject As Any) As Long
    Private Type BITMAP '14 bytes
            bmType As Long
            bmWidth As Long
            bmHeight As Long
            bmWidthBytes As Long
            bmPlanes As Integer
            bmBitsPixel As Integer
            bmBits As Long
    End TypeSub GetBmpInfo()
        Dim bmp As BITMAP
        
        GetObject Me.Picture.Handle, Len(bmp), bmp
    End Sub
    BITMAP结构里已包含图像的所有信息了。
      

  6.   


    是的, 我不是说用GetBitmapBits获取所有, 其他方法的只要能取到所有数据就可以
      

  7.   

    要完整的数据流就不要用GetBitmapBits,图像在内存中文件头头信息和图像数据本来就不是依顺序存放的,要流的话用GDI+  Savetostream函数
      

  8.   

    vb里面可以用吗? 查了查都是delphi在用这个函数
      

  9.   

    我认为大家都考虑多了,二进制流数据直接放到一个byte数组就行了,有多少放多少,原汁原味,不必那么麻烦
      

  10.   


    我用过这个方法
        Dim tmpPic As Picture
        Set tmpPic = CaptureWindow(hWndActive, False, x, y, x + w, y + h) '获取图片
        Dim PBag As New PropertyBag
        Dim B() As Byte
        PBag.WriteProperty "Picture", tmpPic '读取tmpPicture 图片并写到 Pbag 容器中
        
        B = PBag.Contents '获取容器Byte 到 B() 数组中
        Set PBag = Nothing不过得到的数组B 好像不对 大小比通过GetBitmapBits得到的数组还小 , 而且在C#里面不能转换成图片
      

  11.   

    我试了一下,
     Dim PBag As New PropertyBag 
        Dim B() As Byte 
        PBag.WriteProperty "Picture", tmpPic '读取tmpPicture 图片并写到 Pbag 容器中 
        
        B = PBag.Contents '获取容器Byte 到 B() 数组中 
    得到的数据已不是原来的数据,就在本程序段已不能加载为图片
      

  12.   

    这个函数已经是Windows遗弃的孤儿了,应该用更先进的函数GetDIBits,它的第6个参数lpbi接受bitmap的头信息结构指针(需要自己先填充,因为不同类型的bitmap,取得的数据是不同的)。然后连同这个结构和取得的数据,在加上14字节的文件头,就是一个完整的.bmp磁盘位图文件了。