我在程序中保存有一个从图片文件当中读出来的byte数组。
我现在需要直接把这个byte数组保存的图片作为我当前窗体的背景显示出来。
我现在可以把byte数组保存成临时文件然后LoadPicture,但是我希望找到更好的方法。

解决方案 »

  1.   

    用下面的API试试:
    Declare Function SetDIBits Lib "gdi32" Alias "SetDIBits" (ByVal hdc As Long, ByVal hBitmap As Long, ByVal nStartScan As Long, ByVal nNumScans As Long, lpBits As Any, lpBI As BITMAPINFO, ByVal wUsage As Long) As Long
    或用下面的:
    Declare Function SetBitmapBits Lib "gdi32" Alias "SetBitmapBits" (ByVal hBitmap As Long, ByVal dwCount As Long, lpBits As Any) As Long
      

  2.   

    谢谢楼上的
    如果是GIF图片,这两个API也可以使用吗?
      

  3.   

    如果是GIF文件,可以先用LoadPicture将其装入,如
    dim p as Picture
    '或stdPicture,iPicture
    set p=loadpicture("gif file name")
    这样就可以很自由地使用图片对象p了。
      

  4.   

    图像文件与图像数据还是有区别的!SetDIBits与SetBitmapBits只是针对位图的数据部分,而文件还会在其前面加上BITMAPFILEHEADER与BitMapInfoHeader,当然还有可能的调色板!
    更何况,它们操作对象只能是位图!文件,当然可用LoadPicture载入,但文件的byte数组就不上不下了,它成了LoadPicture的一个中间步骤,你需要自已去干一些LoadPicture的事情。非得请API出马了!Private Declare Function OleLoadPicture Lib "olepro32" (pStream As Any, ByVal lSize As Long, ByVal fRunmode As Long, riid As GUID, ppvObj As Any) As Long主要用它,可将内存中的流数据转为Picture对象,Picture的GUID为{7BF80980-BF32-101A-8BBB-00AA00300CAB}。
    创建流数据,可用
    Private Declare Function CreateStreamOnHGlobal Lib "ole32" (ByVal hGlobal As Long, ByVal fDeleteOnRelease As Long, ppstm As Any) As Long注意:这个函数只能用Global内存,不能直接使用VB的Byte数组
      

  5.   

    是啊。肯定有办法的,那个 GIFButton 控件不就是在分解GIF动画时不产生临时文件吗? 帮你顶!