Hello.

Voici mon code qui permet de prendre un screen de l'écran en .bmp et le transformer en .jpg:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
HDC hdcScreen, hdcMem;
HBITMAP hbmScreen;
BITMAPINFO bmi;
void *pBits;

hdcScreen=GetDC(NULL); //récupère le handle de l'écran
hdcMem=CreateCompatibleDC(hdcScreen);
height=GetDeviceCaps(hdcScreen, VERTRES); //obtient le hauteur de l'écran
width=GetDeviceCaps(hdcScreen, HORZRES); //obtient le largeur de l'écran

//en-tête du bitmap
bmi.bmiHeader.biSize = sizeof(BITMAPINFOHEADER);
bmi.bmiHeader.biWidth=width;
bmi.bmiHeader.biHeight=height;
bmi.bmiHeader.biPlanes=1;
bmi.bmiHeader.biBitCount=24;
bmi.bmiHeader.biCompression=BI_RGB;
bmi.bmiHeader.biSizeImage=0;
bmi.bmiHeader.biXPelsPerMeter=0;
bmi.bmiHeader.biYPelsPerMeter=0;
bmi.bmiHeader.biClrUsed=0;
bmi.bmiHeader.biClrImportant=0;

hbmScreen=CreateDIBSection(0, &bmi, DIB_RGB_COLORS, &pBits, NULL, 0);
SelectObject(hdcMem, hbmScreen);
BitBlt(hdcMem, 0, 0, width, height, hdcScreen, 0, 0, SRCCOPY);
JpegFromDib((LPBYTE)pBits);

DeleteDC(hdcMem);
DeleteObject(hbmScreen);
Pourquoi quand je fait un GetLastError() après CreateDIBSection, j'ai le droit à : ERROR_NOT_ENOUGH_MEMORY -> Not enough storage is available to process this command.

Pourtant j'ai encore environ 600Mo de ram de libre !

Merci d'avance...