Freigabe von Screenshot?
Von: Kevin (blackmaster@gmx.de) [Profil]
Datum: 08.10.2009 23:43
Message-ID: <halmhj$r05$1@news.albasani.net>
Newsgroup: de.comp.lang.iso-c++
Datum: 08.10.2009 23:43
Message-ID: <halmhj$r05$1@news.albasani.net>
Newsgroup: de.comp.lang.iso-c++
Hey,
Ich habe ein kleines Problem mit meinem Programm.
Dieses "scannt" auf dem Bildschirm nach gewissen Pixeln und reagiert darauf.
Da ich ziemlich viele Pixel auslese, hab ich mir gedacht, direkt ein
Snapshot in ein Array einzulesen und dann damit zu arbeiten.
Dies geht auch viel schneller als immer mit GetPixel, jedoch hab ich das
Problem, dass mein Programm sehr viel Speicher benötigt.
Ich schaffe es jedoch nicht, diesen Speicher wieder Freizugeben und ich
weiß nicht, wieso.
Erstmal der Code:
#include <windows.h>
...
int dx = GetSystemMetrics(SM_CXSCREEN);
int dy = GetSystemMetrics(SM_CYSCREEN);
RGBQUAD* mem = new RGBQUAD[dx * dy*sizeof(RGBQUAD)];
...
RGBQUAD* getScreen(){
printf("getScreen 0x%X\n",mem);
BITMAPINFO info = {0};
info.bmiHeader.biSize = sizeof(BITMAPINFOHEADER);
info.bmiHeader.biWidth = dx;
info.bmiHeader.biHeight = dy;
info.bmiHeader.biPlanes = 1;
info.bmiHeader.biBitCount = 32; // 32:RGBQUAD; 24:RGBTRIPLE
HBITMAP bitmap;
// delete [] mem; <- mit delete [] versucht, ging nicht.
RGBQUAD* memory = mem;
hdcDesktop = GetDC(0);
bitmap = CreateDIBSection(hdcDesktop, &info, DIB_RGB_COLORS,
(void**)&memory, 0, 0);
if(!bitmap || !memory) return 0;
//free(mem); <- mit free versucht, ging nicht.
HDC hdcMemory = CreateCompatibleDC(hdcDesktop);
HGDIOBJ oldbitmap = SelectObject(hdcMemory, bitmap);
BitBlt(hdcMemory, 0, 0, dx, dy, hdcDesktop, 0, 0, SRCCOPY);
SelectObject(hdcMemory, oldbitmap);
DeleteDC(hdcMemory);
DeleteObject(oldbitmap);
DeleteObject(bitmap);
ReleaseDC(0,hdcDesktop);
return memory;
}
...
Nun die Frage, wie schaffe ich es, dass ich in main() auf mem Zugreifen
kann, ohne, dass ich den ganzen Speicher zumülle?
MfG
Kevin
[ Auf dieses Posting antworten ]Antworten
- Thomas J. Gritzan (09.10.2009 00:49)
- Kevin (09.10.2009 16:11)
- Björn Hendriks (12.10.2009 15:39)
- Kevin (13.10.2009 00:53)
