Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > VB6 > битмап из памяти


Автор: firstbrother 13.4.2006, 15:58
Здравствуйте, Уважаемые!!!
Уделите пару минут своего бесценнейшего времени и взгляните на этот незадачливый код.
Проблема заключается в том, что с помощью этого кода не удается увидеть изображение.
Может обнаружите что-то не то?

...
Код

Dim bih As BITMAPINFOHEADER
  Dim bi As BITMAPINFO
  Dim hbmp As Long
  Dim BitsMem As Long
  Dim hMemDib As Long
  Dim MemLockDib As Long
 
  Dim hInst As Long
  Dim Pic As PicBmp
  Dim ipic As IPicture
  Dim IID_IDispatch As GUID
  Dim lRC As Long
  Dim bits() As Byte
...
hMemDib = ...' дискриптор на область памяти [[BITMAPINFOHEADER (40 bytes) ][Color table (1024 bytes)][Bitmap   data (BITMAPINFOHEADER.biSizeImage bytes)]]
    MemLockDib = GlobalLock(hMemDib)
    CopyMemory bi, ByVal MemLockDib&, Len(bi)
    BitsMem = MemLockDib + Len(bi)
    ReDim bits(bi.bmiHeader.biSizeImage - 1)
    CopyMemory bits(0), ByVal BitsMem&, bi.bmiHeader.biSizeImage
    hbmp = CreateBitmap(bi.bmiHeader.biWidth, bi.bmiHeader.biHeight, bi.bmiHeader.biPlanes, _
      bi.bmiHeader.biBitCount, bits(0))
       
    If hbmp <> 0 Then
      IID_IDispatch.Data1 = &H20400
      IID_IDispatch.Data4(0) = &HC0
      IID_IDispatch.Data4(7) = &H46
      Pic.Size = Len(Pic)
      Pic.Type = vbPicTypeBitmap
      Pic.hbmp = hbmp
      Pic.hPal = 0
      lRC = OleCreatePictureIndirect(Pic, IID_IDispatch, 1, ipic)
      If lRC = 0 Then
           Form3.Picture1 = ipic
           Set ipic = Nothing
      Else
           Call DeleteObject(hbmp)
      End If
      Form3.Show
    End If
    GlobalFree (hMemDib)
...

P.S.: та же область памяти нормально загружается Delphi

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)