Bonjour à tous,
je cherche le moyen de dessiner un DIB sur un TForm ou TPanel.
J'ai bien regardé du côté de la fonction DrawDIBDraw mais je ne vois pas trop comment l'utiliser.
Merci d'avance pour vos lumières,
Neilos
Bonjour à tous,
je cherche le moyen de dessiner un DIB sur un TForm ou TPanel.
J'ai bien regardé du côté de la fonction DrawDIBDraw mais je ne vois pas trop comment l'utiliser.
Merci d'avance pour vos lumières,
Neilos
Il faut utiliser les fonctions du Canvas de la TForm Exemple
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 void __fastcall TForm1::Button1Click(TObject *Sender) { Graphics::TBitmap *pBitmap = new Graphics::TBitmap(); try { pBitmap->LoadFromFile("MyBitmap.png"); pBitmap->Transparent = true; pBitmap->TransparentColor = pBitmap->Canvas->Brush->Color; Form1->Canvas->Draw(0,0,pBitmap); pBitmap->TransparentMode = tmAuto; Form1->Canvas->Draw(50,50,pBitmap); } catch (...) { ShowMessage("Could not load or display bitmap"); } delete pBitmap; }
Oui mais je n'ai pas un TBitmap j'ai un DIB retourné par les fonctions VCM pour récupérer des frame....
Je peut le caster en TBitmap ?
Tu peux probablement le caster en TBitmap... j'ai jamais essayé...
J'utilise DrawDibDraw dans un de mes programmes, ça marche bien.
il te faut une variable de type HDRAWDIB et l'initialiser avec DrawDibOpen();
Ensuite au niveau du code de dessin, une variable HDC juste temporaire le temps de dessinner dessus.
la fonction DrawDibDraw prend en params 1 et 2 les deux variables précédemment évoquées.
les paramètres suivants détérminent l'emplacement de dessin.
Le suivant, un LPBITMAPINFOHEADER est en fait contenu dans le DIB qu'on t'as refilé. tu peux faire un cast de ton DIB vers (LPBITMAPINFOHEADER).
le suivant correspond aux données (LPVOID) elles sont dans le DIB, à la suite du header. mon buffer DIB est en char* je fais donc buffer+40 pour ce paramètre. ( le header prend 40 octets )
les paramètres suivants determinent la part de la source qui est dessiné.
Ok merci je vais tester ça dimanche soir (dès que je serais de retour chez moi !)
Salut il me reste un petit pb....je met quoi dans HDC ?
Ah oui c'est vrai...
Dans une fonction d'initialisation du programme:
Code : Sélectionner tout - Visualiser dans une fenêtre à part mainDC = DrawDibOpen(); // mainDC est de type HDRAWDIB
A l'intérieur de la fonction de dessin
et en sortie de prog :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9 HDC hdc; //... hdc = GetDC(Frm_main->Handle); //Frm_main est la form sur laquelle on dessine. // ... appel de DrawDibDraw(...) ReleaseDC(mainDC, hdc);
Code : Sélectionner tout - Visualiser dans une fenêtre à part if (mainDC) DrawDibClose(mainDC);
Voilà normalement ça devrait marcher...
Partager