Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

re: capture de fenetre

3 réponses
Avatar
syn-ack
bonjour,
ce veut pas marcher!!!!!!!!
je pige vraiment pas pourquoi

wndHDC=GetDC((HWND)cwps.hwnd);
GetWindowRect((HWND)cwps.hwnd, &rc);
MessageBox(NULL, x, "SynDesk3d", MB_OK);
hMemDC = CreateCompatibleDC(wndHDC);
capBMP =CreateCompatibleBitmap(wndHDC, 128, 128);

HBITMAP hOld = (HBITMAP) SelectObject(hMemDC,capBMP);
StretchBlt(hMemDC, 0, 0, 128,128,wndHDC,0,0,(rc.right -
rc.left),(rc.bottom - rc.top), SRCCOPY);
GetObject (capBMP, sizeof (BM), &BM);
GfxBindTexture(tex,(GLenum)NULL);
glPixelStorei(GL_UNPACK_ALIGNMENT, 4);

glTexEnvi(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_MODULATE);
glTexImage2D(GL_TEXTURE_2D, 0, 3, BM.bmWidth, BM.bmHeight, 0,
GL_BGR_EXT, GL_UNSIGNED_BYTE,BM.bmBits );


SelectObject(hMemDC,hOld);


ReleaseDC((HWND)cwps.hwnd,wndHDC);
DeleteDC(wndHDC);

resultat des courses jai que du noir pour la texture

3 réponses

Avatar
Christian ASTOR
syn-ack a écrit:


ce veut pas marcher!!!!!!!!
je pige vraiment pas pourquoi
GetObject (capBMP, sizeof (BM), &BM);



- On t'a donné une des solutions hier...
- Tu n'as pas bien lu la doc :
"If hgdiobj is a handle to a bitmap created by any other means,
GetObject returns only the width, height, and color format information
of the bitmap.
You can obtain the bitmap's bit values by calling the GetDIBits or
GetBitmapBits function."
Avatar
syn-ack
bjr,

ca veut tjr pas marcher,, jai beau essayer, plein de chose, j'arrive tjr au
meme resultat. les handle et les Hbitmap, c pas mon truc j'ai bien
l'impression.cher mr astor, je solicite ancore votre aide.

wndHDC=GetWindowDC((HWND)cwps.hwnd);

GetWindowRect((HWND)cwps.hwnd, &rc);


hMemDC = CreateCompatibleDC(wndHDC);

capBMP =CreateCompatibleBitmap(wndHDC, 128, 128);

HBITMAP hOld = (HBITMAP) SelectObject(hMemDC,capBMP);


BitBlt(hMemDC,0,0,127,127,wndHDC,0,0,SRCCOPY);

/////////////// la partie du haut a l'air d'etre ok, je l'ai testé en
ecrivant sur la fenetre opengl.

BITMAP BM;

//StretchBlt(hMemDC, 0, 0, 128,128,wndHDC,0,0,(rc.right -
rc.left),(rc.bottom - rc.top), SRCCOPY);

BITMAPINFO bmpInf;

BITMAPINFOHEADER bmpInfHd;

bmpInfHd.biSize = 128 * 128 * 3;

bmpInfHd.biWidth = 128;

bmpInfHd.biHeight = 128;

bmpInfHd.biPlanes = 1;

bmpInfHd.biBitCount = 24;

bmpInfHd.biCompression = BI_RGB;

bmpInfHd.biSizeImage = 0;

bmpInfHd.biXPelsPerMeter = 100;

bmpInfHd.biYPelsPerMeter = 100;

bmpInfHd.biClrUsed = 0;

bmpInfHd.biClrImportant = 0;

bmpInf.bmiHeader = bmpInfHd;


GetDIBits(hMemDC, capBMP, 0, 128,data, &bmpInf, DIB_RGB_COLORS);

SelectObject(hMemDC,hOld);



** cette partie du bas , c du code repompé dans un exemple qui devrait donc
etre correct.

GfxBindTexture(tex,(GLenum)NULL);

glPixelStorei(GL_UNPACK_ALIGNMENT,4);

glTexEnvi(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_MODULATE);

glTexImage2D(GL_TEXTURE_2D, 0, 3, 128, 128, 0, GL_BGR_EXT,
GL_UNSIGNED_BYTE,data );
Avatar
Christian ASTOR
syn-ack a écrit:

ca veut tjr pas marcher,, jai beau essayer, plein de chose, j'arrive tjr au
meme resultat.



Mais sert toi du code de la KB 186736.
Après ton BitBlt(), tu fais un truc du genre :

HBITMAP hDIBSection = Create24BPPDIBSection(wndHDC, 128, 128); // cf KB
HDC hMemDC2 = CreateCompatibleDC(wndHDC);
SelectObject(hMemDC2, hDIBSection);
BitBlt(hMemDC2, 0, 0, 128, 128, hMemDC, 0, 0, SRCCOPY );
DIBSECTION ds;
GetObject(hDIBSection, sizeof(DIBSECTION), &ds);

Là, ds.dsBm.bmBits doit contenir les bitmap bits.

Pour le vérifier, (le carré de 128*128 de la fenêtre doit s'afficher en
haut à gauche de l'écran) :

HDC hScreenDC = GetDC(NULL);
StretchDIBits(hScreenDC,
0, 0, 128, 128,
0, 0, 128, 128,
ds.dsBm.bmBits,
(LPBITMAPINFO)&ds.dsBmih,
DIB_RGB_COLORS,
SRCCOPY);
ReleaseDC(NULL, hScreenDC);
// + Releases GDI

Après, pour ta partie OpenGL, je n'y connais rien...