GetBitmapBits et SetBitmapBits en C++

Fermé
Graindolium Messages postés 7 Date d'inscription dimanche 30 septembre 2007 Statut Membre Dernière intervention 24 décembre 2007 - 24 déc. 2007 à 00:02
 le père - 24 déc. 2007 à 00:40
Bonjour,

J'ais un gros problème en C++ sur DEV s’est que je n’arrive pas à faire un tableau ayant les valeurs des pixels d’une image.
Mon but étant de faire une retouche image.
S’est que je doit faire une DLL qui fasse les retouches image pour un programme.
Je faisais avec SetPixel et GetPixel avent mais s’est que s’est un peut lent.
J’ais déjà cherché des choses et testé des exemples mais je suis bloqué et étant débutant, s’est que je suis plutôt habitué au Basic.

Voici la function que j’ais faite et qui ne marche pas :
#define ALLOCMEM(size) VirtualAlloc(0, size, MEM_COMMIT|MEM_RESERVE, PAGE_READWRITE)

double __declspec (dllexport) troiscolor1111(HWND WinHandle,int a,int b,long Width,long Height)
{	
    UCHAR *ucBits;
    long i;
    HBITMAP hdc;
    HDC hdc1;
    hdc1 = WinHandle;
    hdc = hdc1;
    
    ucBits = (UCHAR*)ALLOCMEM(Width*Height*4);
    
	GetBitmapBits(hdc,Width*Height*4,ucBits);
	
	for(i=0;i<Width*Height*4;i+=4)
	{
        ucBits[i]=0;
	}
	SetBitmapBits(hdc,Width*Height*4,ucBits);
	hdc1 = hdc;
    ReleaseDC( WinHandle, hdc1 );
    return( 0 );
}


Voilà merci pour vote aide.
A++

1 réponse

Bonjour,

Je suppose que quand tu fais GetBitmapBits(hdc,Width*Height*4,ucBits); tu espères récupérer dans ton buffer les pixels de la fenêtre de handle WinHandle.

Ton premier paramètre hdc a beau avoir le bon type HBITMAP, ce n'est pas du tout un handle de bitmap ! c'est une simple recopie du WinHandle passé en entrée, qui est un handle de fenêtre. ça ne gêne pas trop le compilateur parce qu'il s'agit dans tous les cas d'entiers, mais ça n'a rien à voir.

ça n'est pas très simple, mais le tout est raisonnablement bien expliqué sur le site microsoft :
https://docs.microsoft.com/en-us/previous-versions//ms532276(v=vs.85)?redirectedfrom=MSDN
0