[VB6] LoadImage, heb geen pointer naar de array bit values

Pagina: 1
Acties:

  • Lorn
  • Registratie: Maart 2000
  • Laatst online: 13-01-2025

Lorn

I have a bad feeling...

Topicstarter
Ik heb met LoadImage een bitmap ingelezen vanuit een file, dit lijkt goed te lukken en ik heb dan ook een handle als resultaat terug gehad. Als ik nou met GetObjectApi de informatie uitlees voor mijn bitmap dan krijg ik keurig de afmetingen en bpp te zien. Het probleem is dat de bmBits op 0 blijft staan. Oftewel ik heb geen pointer naar locatie van de bit values.

Nou heb ik een routine gevonden die een bitmap omzet naar een VB Picture. Als ik daar de handle aan geef die LoadImage terug gaf dan krijg ik keurig mijn plaatje te zien! Ik snap alleen niet waarom deze routine wel de bit values weet te vinden.

Kan iemand me verder helpen want ik wil zelf bij de bit values kunnen komen. Het uiteindelijke doel is namelijk om het plaatje te kunnen resizen met resampling. Ik heb BitBlt en StretchBlt maar dan gaat mijn bitmap er ontzettend lelijk uitzien als ik 'em gaan verkleinen. Ik heb al een stuk code voor het resizen maar een voorwaarde om dat te kunnen gebruiken is dat ik de bit values van de bitmap kan benaderen.

Met deze code lees ik het plaatje in:
Visual Basic:
1
2
3
4
5
6
7
8
9
10
11
12
Private Sub ShowImage(ByVal ImageFile As String)
  Dim hBMP      As Long
  Dim BMPHeader As BITMAP
  
  hBMP = LoadImage(App.hInstance, ImageFile, IMAGE_BITMAP, 0, 0, LR_LOADFROMFILE)
  
  Call GetObjectAPI(hBMP, Len(BMPHeader), BMPHeader)
  
  Set Me.Picture = BitmapToPicture(hBMP)
  
  Call DeleteObject(hBMP)
End Sub


En deze code had ik gevonden om een bitmap te converteren naar een VB picture:
Visual Basic:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
Public Function BitmapToPicture(ByVal hBMP As Long) As IPicture
  Dim oNewPic As Picture, tPicConv As PictDesc, IGuid As GUID
    
  If Not (hBMP = 0) Then
    ' Fill PictDesc structure with necessary parts:
    tPicConv.cbSizeofStruct = Len(tPicConv)
    tPicConv.picType = vbPicTypeBitmap
    tPicConv.hImage = hBMP
    
    ' Fill in IDispatch Interface ID
    IGuid.Data1 = &H20400
    IGuid.Data4(0) = &HC0
    IGuid.Data4(7) = &H46
    
    ' Create a picture object:
    Call OleCreatePictureIndirect(tPicConv, IGuid, True, oNewPic)
    
    ' Return it:
    Set BitmapToPicture = oNewPic
  End If
End Function


Ik heb alle declaraties van types e.d. maar even weg gelaten, mocht iemand daar behoefte aan hebben dan kan ik die altijd alsnog posten.