Bonjour Bonjour
J'aimerai savoir comment faire pour enregistrer des dessins, fait dans un CDC, dans un CBitmap, un peu à la manière de Paint mais sans la gestion de fichier.
Je suis sous VS2005 et toutes infos me sera utile, Merci ^^
Bonjour Bonjour
J'aimerai savoir comment faire pour enregistrer des dessins, fait dans un CDC, dans un CBitmap, un peu à la manière de Paint mais sans la gestion de fichier.
Je suis sous VS2005 et toutes infos me sera utile, Merci ^^
C'est simple, dans un DC il y a déjà un Bitmap.
Si tu as plein accès au DC (un MemoryDC par exemple), tu peux sélectionner un autre bitmap à la place de celui qui est dedans, et travailler sur le bitmap ainsi libéré.
Si tu n'as pas plein accès au DC, tu devras créer un MemoryDC avec un bitmap de la bonne taille, faire un BitBlt() d'un DC à l'autre, puis isoler le bitmap de ton MemoryDC.
Je ne sais pas trop comment on fait ça en MFC, j'ai l'habitude d'utiliser l'API Win32. Mais bon, ça ne doit pas être trop différent.
Pour Win32:
- CreateCompatibleDC() pour créer le memoryDC.
- CreateCompatibleBitmap(DC d'origine, pas le memoryDC) pour créer un bitmap du même type/même résolution couleur, ou CreateDIBSection() pour créer un bitmap avec sa propre palette et résolution couleur.
- SelectObject() pour sélectionner ou isoler un bitmap d'un DC.
- BitBlt(..., SRCCOPY) pour la copie.
SVP, pas de questions techniques par MP. Surtout si je ne vous ai jamais parlé avant.
"Aw, come on, who would be so stupid as to insert a cast to make an error go away without actually fixing the error?"
Apparently everyone. -- Raymond Chen.
Traduction obligatoire: "Oh, voyons, qui serait assez stupide pour mettre un cast pour faire disparaitre un message d'erreur sans vraiment corriger l'erreur?" - Apparemment, tout le monde. -- Raymond Chen.
tu peux regarder dans la faq dans un premier temps http://c.developpez.com/faq/vc/?page...iteWindowToDIB
Merci pour les infos.
La FAQ c'est la 1ere chose que je lis... mais j'avais pas comprit ce passage...
Et d'ailleurs je doit toujours pas avoir comprit car ce que je fais ne marches pas :/
J'obtient une image aux bonnes dimmensions mais noire :/
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
24
25
26
27
28
29
30
31
32
33 list.Create(40, 10, ILC_COLOR, 3, 3); CBitmap bitmap ; CDC * dc; CDC memDC; CRect rect; dc = GetDC() ; memDC.CreateCompatibleDC(dc); bitmap.CreateCompatibleBitmap(dc, 40,10 ); CBitmap* pOldBitmap = memDC.SelectObject(&bitmap); CBrush br ; br.CreateHatchBrush(2,RGB(255,0,0)) ; memDC.SelectObject(&br) ; memDC.Rectangle(0,0,40,10) ; list.Add(pOldBitmap,RGB(0,0,255)) ; memDC.BitBlt(0, 0, 40,10, dc, 0, 0, SRCCOPY); memDC.SelectObject(pOldBitmap); c_box.SetImageList(&list) ;
Je suis certain que ca vient de l'ordre dans lequel je met les fonctions mais là je vois pas trop...
ça fait quoi, ça ?
Code : Sélectionner tout - Visualiser dans une fenêtre à part list.Add(pOldBitmap,RGB(0,0,255)) ;
SVP, pas de questions techniques par MP. Surtout si je ne vous ai jamais parlé avant.
"Aw, come on, who would be so stupid as to insert a cast to make an error go away without actually fixing the error?"
Apparently everyone. -- Raymond Chen.
Traduction obligatoire: "Oh, voyons, qui serait assez stupide pour mettre un cast pour faire disparaitre un message d'erreur sans vraiment corriger l'erreur?" - Apparemment, tout le monde. -- Raymond Chen.
Partager