SnOOpss
Messages postés571Date d'inscriptionsamedi 3 avril 2004StatutMembreDernière intervention 5 décembre 2013
-
12 juin 2004 à 12:09
SnOOpss
Messages postés571Date d'inscriptionsamedi 3 avril 2004StatutMembreDernière intervention 5 décembre 2013
-
16 juin 2004 à 11:29
Bonjour tout le monde !!
Voila g voulu modifier une fonction !!
void test (HBITMAP hBmp) {
if (!hBmp) return 0;
........
DC hdcc = NULL;
hdcc = CreateCompatibleDC(NULL);
SelectObject(hdcc, hBmp);
.........
for (int y = 0; y < bm.bmHeight; y++)
{
for (int x = 0; x < bm.bmWidth; x++)
{
int x0 = x;
while (x < bm.bmWidth)
{
char chaine[5];
itoa(GetPixel(hdcc,x, y),chaine,10);
MessageBox (NULL, chaine, "ee", MB_OK);
if(GetPixel(hdcc,x, y) == RGB(0,0,0) )
x++;
............
et la fonction getpixel me retourne toujour -1 ???
G vu que ca voulait dire ke je me trouvais hors des limites mais je ne voit pas trop ou j'ai fait l'erreur !!
SnOOpss
Messages postés571Date d'inscriptionsamedi 3 avril 2004StatutMembreDernière intervention 5 décembre 2013 12 juin 2004 à 17:20
G trouvé l'erreur mais pas la solution !!
En fait Le HDC se fait mal !!
HDC hdcc = NULL;
hdcc = CreateCompatibleDC(NULL);
if (hdcc == NULL) { MessageBox (NULL, "erreur0","ee", MB_OK); }
if (SelectObject(hdcc, hBmp) == NULL) { MessageBox (NULL, "erreur1","ee", MB_OK); }
En faisant ca j'ai la boite de dialogue erreur1 !!
ymca2003
Messages postés2070Date d'inscriptionmardi 22 avril 2003StatutMembreDernière intervention 3 juillet 20067 14 juin 2004 à 21:15
pour la création du DC compatible, utilise celui de l'écran :
HDC hScreenDC = GetDC(NULL);
HDC hdc = CreateCompatibleDC(hScreenDC);
..
le reste comme ta première solutions
solution avec getDiBbits : donner directement lpBits et pas l'adresse de cette variable :
GetDIBits(hdc, hBmp, 0, bm.bmHeight, lpBits, &bi, DIB_RGB_COLORS);
récupérer les pixels en 32 bits/pixel simplifi l'accès :
// tout d'abord on récupère des informations sur la taille du bitmap
BITMAP bmpInfo;
GetObject(hBitmap, sizeof(BITMAP), &bmpInfo);
// allocation mémoire. On va récupérer le bitmap en 32 bits/pixel pour simplifier
// comme cela, on sera sur que chaque ligne du bitmap sera codé sur un nombre
// d'octets multiple de 4. Si le bitmap n'est pas bottom-up (cas le plus fréquent)
// mais top-down, bmpInfo.bmHeight est négatif.
LPBYTE lpBits = new BYTE[4*bmpInfo.bmWidth*bmpInfo.bmHeight];
SnOOpss
Messages postés571Date d'inscriptionsamedi 3 avril 2004StatutMembreDernière intervention 5 décembre 2013 16 juin 2004 à 11:29
Nickel merci beaucoup !!!
Pour la partie avec getpixel ca deconne toujours, si quelqu'un trouve pourquoi ca m'interesse toujours par curiosité mais comme la seconde methode marche et quelle est 10 fois plus rapide en ce qui me concerne mon probleme est resolu !!!
Et merci aussi pour les modif de code !!!