Bonjour à tous,
J'utilise une DLL qui me renvoie un Hbitmap sur une image BMP en niveau de Gris.
Dans un premier temps voici ce que j'ai réussi à pondre en fouillant sur le forum. Ceci fonctionne très bien pour visualiser mon image et l'enregistrer, cependant, mon image une fois enregistrée fait a peu près le triple de sa taille normale ( car l'image renvoyée par la dll est en niveau de gris codée sur 1 octet par pixel ), je pense que l'image est retransformée en RVB en récupérant l'image via le Clipboard.
alors j'ai fini par faire ce qu'il y a ci-dessous mais impossible delire les données de mon image ... je pense que le problème est liée au codage de l'image (1octet par pixel) et que la fonction GetDIBits ne sait pas l'interpréter. Autrement, lorsque j'utilise la fonction GetObjectApi, je retrouve les bonnes dimensions de mon image dans ma structure PicInfo.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18 'open the clipboard OpenClipboard imgCheque.hwnd 'Clear the clipboard EmptyClipboard 'Put our bitmap onto the clipboard SetClipboardData CF_BITMAP, BmpFront 'Check if there's a bitmap on the clipboard If IsClipboardFormatAvailable(CF_BITMAP) = 0 Then MsgBox "There was an error while pasting the bitmap to the clipboard!" End If 'Close the clipboard CloseClipboard 'Get the picture from the clipboard imgCheque.Picture = Clipboard.GetData(vbCFBitmap) SavePicture imgCheque.Picture, "F:\Projets Borland Studio\DLL\BIN\images\Ftest.bmp"
BmpFront est mon hBitmap retourné par la DLL.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23 Dim Buffer() As RGBQUAD Dim PicInfo As BITMAPINFOHEADER Dim Width As Long Dim Height As Long Dim Src_hDc As Long Dim hDCScn As Long Dim OldObj As Long Dim BMPINFO As BITMAPINFO Dim BMPINFOH As BITMAPINFOHEADER GetObjectApi BmpFront, Len(PicInfo), PicInfo Width = PicInfo.biWidth Height = PicInfo.biHeight hDCScn = CreateDCAsNull("DISPLAY", ByVal 0&, ByVal 0&, ByVal 0&) Src_hDc = CreateCompatibleDC(hDCScn) OldObj = SelectObject(Src_hDc, BmpFront) ReDim Buffer(0 To Width - 1, 0 To Height - 1) GetDIBits Src_hDc, BmpFront, 0, Height, Buffer(0, 0), BMPINFO, 0
Alors voici mes questions : comment est t'il possible d'enregistrer un HBitMap directement sur le disque dur ? Si ce n'est pas le cas, comment est ce que je peux enregistrer mon fichier bmp sur disque ? ( j'ai aussi essayé de passer par un fichier binaire en pasant mon HBitmap mais ca ne fonctionne pas non plus )
Merci à tous pour vos conseils, il y a encore des concepts VB qui m'échappent j'en fais que depuis une semaine.![]()
Partager