PDA

Visualizza la versione completa : [C] Catturare lo schermo


Frapper
30-11-2005, 18:17
Salve a tutti...

Come faccio a catturare e salvare lo schermo velocemente?

Ho provate con l'api GetPixel...ma terribilmente lenta , non possibile salvare direttamente il device context delle schermo su una bitmap?

Grazie comunque ....ciaooooooooo

oregon
30-11-2005, 18:50
Intendi tutto il desktop?

La tua applicazione e' visibile?

Frapper
30-11-2005, 18:51
esattemente ci che appare sul desktop anke la mia applicazione

oregon
30-11-2005, 19:24
Nella tua applicazione c'e' una superficie dove vorresti disegnato il desktop ?

O ti basta averlo in una bitmap ?

Frapper
30-11-2005, 19:27
vorrei salvare sul pc... possibilmente convertirla in jpg per una cosa alla volta....comunque salvarla come
sfondo.bmp

oregon
30-11-2005, 19:39
Allora ... con questo semplice codice



#include <windows.h>

void main()
{
HDC hDC = GetDC(NULL);

HDC hMemDC = CreateCompatibleDC(hDC);

SIZE sz;
sz.cx = GetSystemMetrics(SM_CXSCREEN);
sz.cy = GetSystemMetrics(SM_CYSCREEN);

HBITMAP hBmp = CreateCompatibleBitmap(hDC, sz.cx, sz.cy);
if (hBmp)
{
HBITMAP hOld = (HBITMAP) SelectObject(hMemDC, hBmp);
BitBlt(hMemDC, 0, 0, sz.cx, sz.cy, hDC, 0, 0, SRCCOPY);
SelectObject(hMemDC, hOld);

// Bitmap!

DeleteObject(hBmp);
}

DeleteDC(hMemDC);
ReleaseDC(NULL, hDC);
}


nella linea segnata con il commento Bitmap! hai la disponibilita' dell'oggetto hBmp che contiene il desktop e ci puoi fare quello che vuoi ...

Frapper
30-11-2005, 19:44
ecco fino a li ci ero pi o meno arrivato io mio problema proprio nel salvarla sull'harddisk...o comunque gestirla ...come faccio ad avere i singoli BYTE della bitmap ottenuta con il tuo modo?

oregon
30-11-2005, 19:48
Se c'eri arrivato allora il tuo problema non era prelevare il desktop in una bitmap ma salvare su disco una generica bitmap?

E' giusto?

Frapper
30-11-2005, 19:51
ok...mi ero spiegato male...
la gestione dal momento in cui ho la bitmap non salvata sull'harddisk

e poi io per ottenere ildevice del desktop ho usato

hdcs= CreateDC("DISPLAY", NULL, NULL, NULL);

c' differenza?...comunque come faccio a manipolare i byte?

oregon
30-11-2005, 19:59
Il device context e' gia' disponibile ... non ha senso crearlo dal nome di periferica ...

Per salvare la bitmap su disco, la cosa non e' semplicissima.
Esiste un esempio completo su MSDN da cui puoi prendere spunto

http://msdn.microsoft.com/library/default.asp?url=/library/en-us/gdi/bitmaps_7zfp.asp

Loading