Vous ne trouvez pas de réponse à votre problème ? Alors posez la question dans le forum. Souvenez-vous qu'il n'y a jamais de question bête, mais rester dans l'ignorance parce que l'on n'ose pas poser une question, ça c'est une erreur !

Sujet : Créer un DC temporaire, dessiner dedans et récuperer les pixels [ Archives / API ] (hilairenicolas)

mardi 20 décembre 2005 à 18:39:04 | Créer un DC temporaire, dessiner dedans et récuperer les pixels

hilairenicolas

Bonjour à tous,

je voudrais arriver à dessiner (opérations basiques du GDI) dans un DC temporaire, qui n'a pas pour vocation d'etre affiché.
Ce DC devra pouvoir etre très gros (plus grand que la résolution de l'écran, pour que ca ressemble un peu à un DC d'imprimante)
Après le dessin, j'aimerai récuperer un tableau de pixel, afin de l'analyser.

Voilà ce que j'ai essayé (en vain) :
--> Créer un DC (le problème c'est qu'on doit passer "DISPLAY" ou "WINSPOOL" à CreateDC et que j'ai rien réussi à faire avec CreateCompatibleDC)
--> Créer un bitmap compatible (mais ici, la largeur et la hauteur doivent etre supérieur à la résolution de l'écran, donc pas de CreateCompatibleDC(CreateDC("DISPLAY", ...)) )
--> Faire mes dessins (fillrect, lineTo, ...)
--> Tenter de récuperer les pixels avec GetDIBits (et plus précisement, la fonction GetBmpData de YMCA), mais j'obtiens toujours du noir (tableau rempli avec des 0)

Comment faire ?

Merci de votre aide

Nico

mardi 20 décembre 2005 à 19:00:24 | Re : Créer un DC temporaire, dessiner dedans et récuperer les pixels

vecchio56

Administrateur CodeS-SourceS
HDC hScreen = GetDC(0); HDC hdc = CreateCompatibleDC(hScreen); HBITMAP hbmp = CreateCompatibleBitmap(hScreen, x, y); ReleaseDC(0, hScreen); SelectObject(hdc, hbmp); // Utilisation de hdc comme un DC normal DeleteDC(hdc); DeleteObject(hbmp);

mercredi 21 décembre 2005 à 10:51:49 | Re : Créer un DC temporaire, dessiner dedans et récuperer les pixels

hilairenicolas

on m'a conseillé d'utiliser CreateDIBSection

voila ce que je fais :

                BITMAPINFO bmInfo;
                memset(&bmInfo.bmiHeader, 0, sizeof(BITMAPINFOHEADER));
                bmInfo.bmiHeader.biSize         = sizeof(BITMAPINFOHEADER);
                bmInfo.bmiHeader.biWidth        = 6714; // big size
                bmInfo.bmiHeader.biHeight       = 4662;
                bmInfo.bmiHeader.biPlanes       = 1;
                bmInfo.bmiHeader.biBitCount     = 24;

                LPVOID pBit32;
                HBITMAP hBmp = CreateDIBSection(0, &bmInfo, DIB_RGB_COLORS, &pBit32, NULL, 0);
                HDC sdc = GetDC(NULL);
                HDC memDc = CreateCompatibleDC(sdc);
                HBITMAP holdobj = (HBITMAP) SelectObject(memDc, hBmp);

                HBRUSH hBrush = CreateSolidBrush (RGB(255,0,0));
                RECT rect = {2,0,20,200};
                FillRect (memDc, &rect, hBrush) ;
                DeleteObject (hBrush) ;

                SelectObject(memDc, holdobj);
                DeleteDC(hdc);
                ReleaseDC(NULL, sdc);



mais bon, j'ai l'impression que pBit32 contient que des 0, alors qu'il devrait plutot y avoir du rouge ....

Qu'est-ce qui n'est pas bon ?

Merci de ton aide

mercredi 21 décembre 2005 à 16:09:12 | Re : Créer un DC temporaire, dessiner dedans et récuperer les pixels

hilairenicolas

Bon, j'ai fait autrement

vive les DC



Cette discussion est classé dans : créer, récuperer, dc, dessiner, temporaire


Répondre à ce message

Sujets en rapport avec ce message

DC ou fenetre ? [ par AlexMAN ] Bonsoir, Voila, je voux explik mon pb : je veux dessiner, 'sur' les controles d'une fenetre, un rectangle, mais j'ai un ptit souci sur comment dessine comment créer une GPO avec l'interface IGroupPolicyObject [ par ranouna ] bonjour tout le mondeje code en C++, je voudrais créer une GPO avec IGroupPolicyObjectmon code est le suivant : CoInitialize(NULL); IGroupPolicyObject Choisir le DC d'une fenêtre [ par vecchio56 ] Salut, Je voulais savoir si'il est possible de dessiner une fenêtre dans un device contexte spécifique? Par exemple, dessiner tous les fenêtre filles Dessiner sur tout l'ecran [ par memiks ] Voila, je voudrais pouvoir déssiner sur tout l'écran comme si je prenais des notes avec un feutre sur mon écran.J'ai penser à creer une fenetre transp Créer un DC privé [ par GEDEON ] bonjour...    J'utilise les objets GDI dans un CView et j'aimerais utiliser un DC privé.... D'après MSDN, je dois changer la variable membre "style" d Dessiner un joli cadre en C :-) [ par did2604 ] Bonsoir,Petite question toute bête... je m'amuse à créer des cadres de présentation qui commence du style :___________________________________________ dessiner dans une boite de dialog [ par olfa7183 ] salut,je veux creer un compteur qui compte les monnaie inserees.tout d'abord je veux le dessiner puis le programmer.pour le dessin j'ai utilisé le cod creation de fichier en cpp [ par bissmillah ] J'aimerai avoir de l'aide grace aux menbres inscrits,pour créer un fichier texte en cpp,moi j'ai essayer de le créer en c ,c'est un fichier texte dans [déplacé BAR => JAVA] renommer un vecteur [ par papillon2000 ] bonsoir à tous,je veux créer des tableau (Vector) avec un  petit programme qui leurs donne des noms. càd : créer et nommé ces tableaux par le progra


Nos sponsors

Sondage...

CalendriCode

Décembre 2008
LMMJVSD
1234567
891011121314
15161718192021
22232425262728
293031    

Consulter la suite du CalendriCode

Téléchargements

Logiciels à télécharger sur le même thème :



Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel BAÏSE, Merci à Vincent pour ses précieux conseils
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés
Temps d'éxécution de la page : 0,343 sec

Google Coop CodeS-SourceS Google Coop CodeS-SourceS


Certaines images présentes sur le site (notament certains avatars) sont issues des collections IconShock, donc si vous souhaitez utiliser ces icons vous devez les acheter, ne les copiez pas et ne utilisez pas dans vos sites et applications sans les avoir commandé.