Gestion et affichage de bitmaps (API Windows).

Résolu
_michel Messages postés 77 Date d'inscription mardi 27 juin 2006 Statut Membre Dernière intervention 12 août 2010 - 18 oct. 2006 à 18:55
_michel Messages postés 77 Date d'inscription mardi 27 juin 2006 Statut Membre Dernière intervention 12 août 2010 - 19 oct. 2006 à 22:46
   Bonjour à tous,
J'ai un problème avec les bitamps:
je voudrai conserver en mémoire pendant l'execution de mon programme la "capture d'écran", pour l'afficher plus rapidement lors de changements (ou de messages WM_PAINT).
J'utilise pour l'instant SetPixel pour chaque pixel à afficher, mais c'est relativement lent et assez contraignant.
D'après mon aide Windows, il faudrai créer un "compatible bitmap" dans un contexte d'affichage "mémoire", puis avec BitBlt() la transferer dans le contexte d'affichage privé de ma fenêtre.
Le hic, c'est que je ne sais rien sur les "compatible bitmap".
Déja, je m'interroge si je suis sur la bonne voie.

Si quelqu'un en sait plus que moi, il est inviter à le montrer.
Merci d'avance.

4 réponses

SAKingdom Messages postés 3212 Date d'inscription lundi 7 novembre 2005 Statut Membre Dernière intervention 16 février 2009 15
18 oct. 2006 à 22:34
Tu veux modifier l'image? Dans ce cas, regarde cette source:
http://www.cppfrance.com/codes/GET-SETDIBITS_38788.aspx
Elle permet de modifier l'image directement à partir d'un buffer.

C++ (@++)<!--
3
SAKingdom Messages postés 3212 Date d'inscription lundi 7 novembre 2005 Statut Membre Dernière intervention 16 février 2009 15
18 oct. 2006 à 21:00
HDC memDC = CreateCompatibleDC(mainDC); // mainDC est ton DC principal préalablement été récupéré par GetDC

BitBlt(memDC, 0, 0, width, height, mainDC, 0, 0, SRCCOPY);


memDC contiendra ton image. Suffit ensuite de refaire un BitBlt pour retransféré vers le DC principal:

BitBlt(mainDC, 0, 0, width, height, memDC, 0, 0, SRCCOPY);

C++ (@++)<!--
0
_michel Messages postés 77 Date d'inscription mardi 27 juin 2006 Statut Membre Dernière intervention 12 août 2010
18 oct. 2006 à 21:38
Justement, c'est la façon de faire contenir l'image dans le "memory DC" qui m'interesse.
Créer avec CreateCompatibleBitmap ?
   Mais comment modifier le corps de l'image?
Faire soi-même un bitmap, en remplissant une structure BITMAP ou bien peut être une structure BITMAPINFO ?
   Mais alors comment obtenir un handle, puis sélectionner ce bitmap dans le memory DC?

En fait, c'est un peu embrouillé, je ne sais même pas pourquoi utiliser un memory DC.

Merci quand même d'avoir répondu si rapidement.
0
_michel Messages postés 77 Date d'inscription mardi 27 juin 2006 Statut Membre Dernière intervention 12 août 2010
19 oct. 2006 à 22:46
Super, je commence à y voir plus clair.
J'ai du effectuer des modifs, par exemple "myZeroInit" en "ZeroInit", "myWinMain", en "WinMain" (mon compilateur est dev cpp), mais sinon c'est très explicatif.
0
Rejoignez-nous