elinep
Messages postés56Date d'inscriptionjeudi 4 décembre 2003StatutMembreDernière intervention 3 décembre 2009
-
12 avril 2004 à 14:02
gabuzomeuh
Messages postés53Date d'inscriptionjeudi 31 juillet 2003StatutMembreDernière intervention28 mars 2007
-
11 août 2007 à 01:02
Donc comment peut on en win32 afficher une image que l'on a sous la forme d'une matrice de pixels?
J'ai essaye en faisant CreateBitmap() puis en modifiant chaque pixel suivant ma matrice et d'afficher le tout mais je n'y suis pas arrive.
DeAtHCrAsH
Messages postés2670Date d'inscriptionvendredi 25 janvier 2002StatutMembreDernière intervention 6 février 2013 12 avril 2004 à 14:30
Utilise l'API SetPixel qui te permet d'afficher un pixel selon sa couleur et sur le contexte (DC) que tu choisies...
Tu peux ainsi redessinner n'importe quel image sur n'importe quem contexte !
elinep
Messages postés56Date d'inscriptionjeudi 4 décembre 2003StatutMembreDernière intervention 3 décembre 2009 12 avril 2004 à 15:03
Merci pour ta reponse!
Alors je progresse: j'arrive a mettre de la couleur :)
Par contre je pense que je vais encore avoir besoin de tes lumieres:
Si je fais juste SetPixel() evidemment ce que je dessine va disparaitre si par exemple je reduis ma fenetre alors comment on fait pour le reafficher? Je suppose qu'on ne va pas s'amuser a redessiner chaque pixel en fonction de ma matrice, ca doit etre gourmand en ressources ca non?
On ne devrait pas plutot creer un hbitmap en fonction de la matrice? Si oui comment on fait?
DeAtHCrAsH
Messages postés2670Date d'inscriptionvendredi 25 janvier 2002StatutMembreDernière intervention 6 février 2013 12 avril 2004 à 17:30
Essaye de mettre ton image dans un control Picture ...
SI je me trompe pas, elle ne sera pas modifié en cas de resize ou minimisation de la fenetre dans la barre des taches ... Mais j'en suis pas sure ....
Tu me poses une colle la =)
elinep
Messages postés56Date d'inscriptionjeudi 4 décembre 2003StatutMembreDernière intervention 3 décembre 2009 12 avril 2004 à 18:28
Arf lol!
Sinon je pensais que c'etait possible avec CreateCompatibleBitmap() mais je sais pas comment on peut modifier la valeur des pixels du bitamap cree....une idee?
Vous n’avez pas trouvé la réponse que vous recherchez ?
ymca2003
Messages postés2070Date d'inscriptionmardi 22 avril 2003StatutMembreDernière intervention 3 juillet 20067 12 avril 2004 à 23:06
avec CreateDIBSection tu auras un HBITMAT que tu pourras afficher ou tu veux avec en plus un accès aux pixels
(jète un oeil à ma source paint pour l'accès aux pixels d'un bitmap créé comme ça.
le bitmap est affiché en traitant WM_PAINT (qui redessine la fenêtre qd y'a besoin)
elinep
Messages postés56Date d'inscriptionjeudi 4 décembre 2003StatutMembreDernière intervention 3 décembre 2009 15 avril 2004 à 11:33
Merci de ta reponse ymca2003 je crois que tu m'as montré le bon chemin mais la route et longue et je rencontre deja un obstacle :)
Donc j'ai reussi a cree un Hbitmap avec CreateDIBSection() j'ai meme vu comment on pouvait dessiner des trucs dedans (genre rectangle etc...) par contre je n'arrive pas a acceder aux pixels... j'ai regardé ta source mais c'est un peu chaud pour mon petit niveau lol.
Donc ci quelqu'un pouvait me dire comment on peut modifier les pixels d'un bitmap cree a l'aide de cette fonction ca serait gentil.
elinep
Messages postés56Date d'inscriptionjeudi 4 décembre 2003StatutMembreDernière intervention 3 décembre 2009 15 avril 2004 à 21:40
Ok je crois que je commence a comprendre.
Si je ne me trompe pas ce qui va me permettre d'acceder aux bits c'est le 4e parametre de la fonction CreateDIBSection () a savoir le: "PVOID *ppvBits" mais j'ai pas trop idee de ce que c'est et de comment on l'utilise...
elinep
Messages postés56Date d'inscriptionjeudi 4 décembre 2003StatutMembreDernière intervention 3 décembre 2009 16 avril 2004 à 10:53
Bon j'ai fait comme dans ta source.Donc j'ai un LPBYTE m_lpBits et j'ai CreateDIBSection ( , , , (void**) &m_lpBits, , )
Apres j'ai essaye d edirectemetn ecrire une valeur a m_lpBits mais il me dit que je ne peux pas ecrire a l'adresse 0. J'ai donc l'impression que m_lpBits n'a pas ete initialise c'est normal?
ymca2003
Messages postés2070Date d'inscriptionmardi 22 avril 2003StatutMembreDernière intervention 3 juillet 20067 16 avril 2004 à 13:07
Quelle est la valeur retournée par CreateDIBSection ?
si c'est NULL au lieu d'un HBITMAP valide c'est qu'il y a un pb dans les paramètres passés (GetLastError de donnera peut-être plus d'info).
vérifie que tous les champs de BITMAPINFO (et BITMAPINFOHEADER) sont valides.
elinep
Messages postés56Date d'inscriptionjeudi 4 décembre 2003StatutMembreDernière intervention 3 décembre 2009 16 avril 2004 à 16:02
Bon alors je m'en suis sorti avec un CreateDIBitmap (), ca y est ca marche.Maintenant il me reste plus qu'a comprendre comment ca marche :blush)
En tout cas merci pour ta patience ymca2003 et de ton aide.
ymca2003
Messages postés2070Date d'inscriptionmardi 22 avril 2003StatutMembreDernière intervention 3 juillet 20067 17 avril 2004 à 13:20
voici un exemple de DIBSction :
HDC hdc = GetDC(NULL);
BITMAPINFO bi = {0};
memset(&bi, 0, sizeof(BITMAPINFO));
bi.bmiHeader.biSize= sizeof(BITMAPINFOHEADER);
bi.bmiHeader.biWidth=128;
bi.bmiHeader.biHeight=64;
bi.bmiHeader.biPlanes=1;
bi.bmiHeader.biBitCount=24;
bi.bmiHeader.biCompression=BI_RGB;
hBitmap = CreateDIBSection(hdc, &bi, DIB_RGB_COLORS, (void**)&lpBits, NULL, 0);
ReleaseDC(NULL, hdc);
memset(m_lpBits, 0xFF, 128*64*3);
pour affecter la couleur du pixel (x,y) (coordonnées standards ie 0,0 en haut à gauche, mais le bimap est inversé en y):
LPBTYTE lpPixel = lpBits+128*3*(63-y)+3*x:
lpPixel[0] = B;
lpPixel[1] = G;
lpPixel[2] = R;
128*3 doit être multiple de 4, sinon mettre un padding.
pour afficher ce bitmap dans un DC :
HDC hBmpDC = CreateCompatibleDC(hdc);
HBITMAP hOldBmp = (HBITMAP)SelectObject(hMemDC, hBitmap);
BitBlt(x, y, 128, 64, hBmpDC, 0, 0, SRCCOPY);
SelectObject(hBmpDC, hOldBmp);
DeleteDC(hBmpDC);