WinXP
VB6+SP6
access 数据库
-------------------------------------------------
我希望将数据库中的图片直接显示处理Dim ADO_Stream As new ADODB.stream
ADO_Stream.type = adTypeBinary
ADO_Stream.OpenCall ADO_Stream.Write(rst.Fields("Photo").value)
'## Call Stream.LoadFromFile(strFileName)Dim GH As Long
Dim BH As Long
Dim bmW As Long
Dim bmH As Long
            
GdipCreateFromHDC Me.hDC, GH
GdipCreateBitmapFromStream ADO_Stream, BH         到这里VB直接挂掉 Why ???
            
GdipGetImageWidth BH, bmW
GdipGetImageHeight BH, bmH
GdipDrawImageRectI GH, BH, 0, 0, bmW, bmH------------------------------------------Public Declare Function GdipLoadImageFromStream Lib "GdiPlus" (ByVal stream As Any, Image As Long) As GpStatus

解决方案 »

  1.   

    应该跟GdipLoadImageFromStream无关,将流保存到磁盘试试能不能打开由流生成的图片文件。
      

  2.   

    把数据库中的 二进制数据使用 stream 保存到磁盘上 是没有问题的关键是 vb 运行到 GdipCreateBitmapFromStream ADO_Stream,BH 这里  也没报个错 就直接挂掉了
      

  3.   

    现在我怀疑 是不是 ado的stream是不是跟 GdipCreateBitmapFromStream  这个函数兼容 啊啊
    按理说 都叫Stream 应该没问题把
      

  4.   

    所谓的流其实就是字节数组,你使用二进制方式打开文件,然后把图片数据放到字节数组,再调用GdipCreateBitmapFromStream试试。
      

  5.   

    这两个流是两码事,楼主不分东西啊。
    要这样用的:
    dim StreamObject As IUnknown  '或 Istream    Call CreateStreamOnHGlobal(b(0), False, StreamObject)
        Call GdipLoadImageFromStream(StreamObject, img)其中b() 中包括的就是你的整个图片文件内容。
      

  6.   

    谢谢楼上两位 啊啊
    我在网上翻了下 Istream 接口确实不一样啊啊 
      

  7.   

    http://download.csdn.net/source/1483930
      

  8.   

    用 ado stream 读取数据 转换成 byte 数组 然后转换成 IStream 啊啊 只能多中转一次了 谢谢