Ich schreibe gerade an einem kleinem Screen schot programm.
was eigentlich auch schon längst fertig ist.
aber bei einem freund aufm Rechner braucht das ding ellen lange.
Computer
1250 MHZ
3*256 MB SDRam
trotzdem brauch diese Programm 1.0 Sekunden.
Also hab ich mal versucht herauszufinden wo es denn solange dauert.
dada zeile gefunden.
::BitBlt(memDC, 0, 0, nWidth, nHeight, hdc, rc.left, rc.top, SRCCOPY);//diese funktion brauch zulange
Diese Zeile brauch 0.9 sek.
also Dachte ich mir gut wenn du das net in ein anders HDC splitten kannst dann must du das ursprungs hdc nutzen.
also mal die gesammte funktion
So undeswegen nun zur eigentlichn frage.
ich kopiere mir ja das komplete Fenster ind die variable hdc wie ist es möglich direkt aus dieser zu lessen.
Weil wenn ich net den umweg über memhD machen müste fürde da ja denne das BIT blit wegfallen.
hoffe ihr konntet meine frage verstehen.
mfg Faller
was eigentlich auch schon längst fertig ist.
aber bei einem freund aufm Rechner braucht das ding ellen lange.
Computer
1250 MHZ
3*256 MB SDRam
trotzdem brauch diese Programm 1.0 Sekunden.
Also hab ich mal versucht herauszufinden wo es denn solange dauert.
dada zeile gefunden.
::BitBlt(memDC, 0, 0, nWidth, nHeight, hdc, rc.left, rc.top, SRCCOPY);//diese funktion brauch zulange
Diese Zeile brauch 0.9 sek.
also Dachte ich mir gut wenn du das net in ein anders HDC splitten kannst dann must du das ursprungs hdc nutzen.
also mal die gesammte funktion
Code:
int r=0;
clock_t endOp, startOp;
long difference;
HDC hdc;
startOp = clock();
HWND hWnd = 0;
hWnd=GetDesktopWindow();
RECT rc;
::GetWindowRect(hWnd, &rc);
int nWidth = rc.right - rc.left;
int nHeight = rc.bottom - rc.top;
HWND hWndSc = ::GetDesktopWindow();
hdc = ::GetDC(hWndSc);
HDC memDC = ::CreateCompatibleDC(hdc);
BITMAPINFO bmi;
LPBYTE pBits;
ZeroMemory(&bmi, sizeof(bmi));
bmi.bmiHeader.biSize = sizeof(BITMAPINFOHEADER);
bmi.bmiHeader.biWidth = nWidth;
bmi.bmiHeader.biHeight = nHeight;
bmi.bmiHeader.biPlanes = 1;
bmi.bmiHeader.biBitCount = 32;
bmi.bmiHeader.biCompression = BI_RGB;
bmi.bmiHeader.biSizeImage = 32*nWidth*nHeight/8;
HBITMAP hbm;
hbm = CreateDIBSection(memDC, &bmi, DIB_RGB_COLORS, (void **)&pBits, NULL, 0);
::BringWindowToTop(hWnd);
HBITMAP hbmOld = (HBITMAP)::SelectObject(memDC, hbm);
::BitBlt(memDC, 0, 0, nWidth, nHeight, hdc, rc.left, rc.top, SRCCOPY);//diese funktion brauch zulange
BYTE *zeiger=pBits;
int i=0;
for(i=0;i<32*nWidth*nHeight/8;i++)
{
pbBits[we-1][i]=(unsigned char)*zeiger;
zeiger++;
}
So undeswegen nun zur eigentlichn frage.
ich kopiere mir ja das komplete Fenster ind die variable hdc wie ist es möglich direkt aus dieser zu lessen.
Weil wenn ich net den umweg über memhD machen müste fürde da ja denne das BIT blit wegfallen.
hoffe ihr konntet meine frage verstehen.
mfg Faller