我使用GetDIBits将一个图片读入了一个byte数组并且经过了运算处理,
不过我不想用SetDIBitsToDevice显示这样图片,我定义了一个IPictureDisp变量,有什么方法可以将这个byte数组中的图片置入IPictureDisp变量中,
这样我只需要picture1.picture=IPictureDisp变量就可以显示图片了……使用SetDIBitsToDevice无法在窗体为隐藏的情况下将图片都显示好,然后再显示窗体。

解决方案 »

  1.   

    可以用 SetDIBits,
    或者可以自己创建一个 IPictureDisp。
      

  2.   

    IPictureDisp是COM提供的VB6居然不能直接访问COM端口,导致这个很简单的功能很难实现间接办法:SetDIBitsToDevice到一个AutoRedraw的PictureBox
      

  3.   

    使用SetDIBitsToDevice无法在窗体为隐藏的情况下将图片都显示好,然后再显示窗体。=========================================处理“Paint”事件!!!
      

  4.   

    用 OleCreatePictureIndirect(我记得是这个名字)创建 IPictureDisp 。不知道 Bill 怎么不让大家 set pic = new ipicturedisp
    大概因为 IPictureDisp 是 GDI32 句柄s 的封装(而且只是封装),VB 程序员没必要知道HBITMAP是什么。
      

  5.   

    OleCreatePictureIndirect的实例:Private Type PICTDESC
      cbSizeofStruct As Long
      PicType As Long
      hImage As Long
      xExt As Long
      yExt As Long
    End TypePrivate Type GUID
      Part1 As Long
      Part2 As Integer
      Part3 As Integer
      Part4 As Integer
      Part5(1 To 6) As Byte
    End TypePrivate Declare Function OleCreatePictureIndirect Lib "Olepro32" _
     (ByRef pPictDesc As PICTDESC, ByRef RIID As GUID, _
     ByVal fOwn As Long, ByRef ppvObj As Any) As Long
    Private Declare Function IIDFromString Lib "OLE32" _
     (ByVal lpsz As String, ByRef lpiid As GUID) As LongPublic Function PictureFromHandle(ByVal Handle As Long, _
     ByVal PictureType As PictureTypeConstants, _
     Optional ByVal PictureOwnsHandle As Boolean = False) _
     As StdPicture  Dim nPicture As Picture
      Dim nPictDesc As PICTDESC
      Dim nIID As GUID
      Dim nHResult As Long
      
      Const kPictureIID = "{7BF80981-BF32-101A-8BBB-00AA00300CAB}"  With nPictDesc
        .cbSizeofStruct = Len(nPictDesc)
        .PicType = PictureType
        .hImage = Handle
      End With
      nHResult = IIDFromString(StrConv(kPictureIID, vbUnicode), nIID)
      If nHResult Then
        Err.Raise nHResult
      Else
        nHResult = OleCreatePictureIndirect(nPictDesc, nIID, _
         PictureOwnsHandle, nPicture)
        If nHResult Then
          Err.Raise nHResult
        Else
          Set PictureFromHandle = nPicture
        End If
      End If
    End Function