[Frage]Bild aus GUI Objekt erzeugen
-
hast du das mal gegooglet und gesehen was da raus kommt? ich schreib doch keinen beitrag befor ich nicht gegooglet habe
-
Und wie sieht es mit der Suche hier im Forum bzw. der zugehörigen FAQ aus?
-
blub1991 schrieb:
hast du das mal gegooglet und gesehen was da raus kommt? ich schreib doch keinen beitrag befor ich nicht gegooglet habe
Jau, habe ich. Unter den ersten fünf Treffern sind mindestens zwei funktionierende Lösungen. Ich schreib doch keinen Beitrag, bevor ich ich den nicht überprüft habe
-
aus der forum suche kommt auch nichts brauchbares raus, wofür haltet ihr mich eigentlich?
-
Hallo
Zumindestens hast du nicht in die FAQ hier im Builder-Forum geschaut, denn dort gibt es Beiträge zum Thema Screenshot.
bis bald
akari
-
Alter Schwede.... hier das kombinierte Ergebnis aus Let me google that for you, search the results and copy/paste the solution:
void SaveScreen(HWND pScreen, char Path[]) { int Width = /*GetSystemMetrics(SM_CXSCREEN)*/1280; int Height = /*GetSystemMetrics(SM_CYSCREEN)*/1024; HDC hdcScreen; HBITMAP hbmScreen; //---------------Bitmap Informationen BITMAPINFO infobmp; infobmp.bmiHeader.biSize = sizeof(BITMAPINFOHEADER); infobmp.bmiHeader.biWidth = Width; infobmp.bmiHeader.biHeight = Height; infobmp.bmiHeader.biPlanes = 1; infobmp.bmiHeader.biBitCount = 24; infobmp.bmiHeader.biCompression = 0; infobmp.bmiHeader.biSizeImage = 0; infobmp.bmiHeader.biXPelsPerMeter = 0; infobmp.bmiHeader.biYPelsPerMeter = 0; infobmp.bmiHeader.biClrUsed = 0; infobmp.bmiHeader.biClrImportant = 0; int* bitmap = new int[Width*Height*3]; BITMAPFILEHEADER bfheader; bfheader.bfType = 19778; bfheader.bfSize = sizeof(BITMAPFILEHEADER) + Width*Height*3 + sizeof(BITMAPINFOHEADER); bfheader.bfReserved1 = 0; bfheader.bfReserved2 = 0; bfheader.bfOffBits = sizeof(BITMAPFILEHEADER) + sizeof(BITMAPINFOHEADER); //Bitmap ----------------------- Informationen hdcScreen = GetWindowDC(pScreen); hbmScreen = CreateCompatibleBitmap(hdcScreen, Width, Height); // temporärer DC HDC hdcTemp = CreateCompatibleDC(hdcScreen); // Bitmap reinselektieren HBITMAP hbmOld = (HBITMAP)SelectObject(hdcTemp, hbmScreen); // Inhalt von Desktop übertragen BitBlt(hdcTemp, 0, 0, Width, Height, hdcScreen, 0, 0, SRCCOPY); int iResult = GetDIBits(hdcTemp, hbmScreen, 0, Height, bitmap, &infobmp, DIB_RGB_COLORS); // aufräumen SelectObject(hdcTemp, hbmOld); DeleteObject(hbmScreen); DeleteDC(hdcTemp); HANDLE hfile = CreateFile(Path, GENERIC_WRITE, 0, 0, OPEN_ALWAYS, 0, 0); //Datei Schreiben DWORD word; WriteFile(hfile, &bfheader, 14, &word, NULL); WriteFile(hfile, &infobmp, 40,& word, NULL); WriteFile(hfile, bitmap, Width*Height*3, &word,NULL); ReleaseDC(pScreen, hdcScreen); CloseHandle(hfile); delete[] bitmap; }
Hab´s weder kompiliert noch ausprobiert, aber irgendwas soll ja für dich auch noch übrigbleiben... z.B. die Portierung von C nach C++.
-
Um die FAQ's hier im Forum nicht zu kurz kommen zu lassen auch der Link
http://www.c-plusplus.net/forum/viewtopic-var-t-is-39305.html
und zwischen den Gruppen
Schnittstellen
Scrollbalkenkommt
Screenshot
Version 1
Version 2Bitte die Seite
http://www.c-plusplus.net/forum/viewtopic-var-t-is-39305.html
ansurfen um auf Version 1 und Version 2 klicken zu können
-
Hallo,
hier noch was VCL-Nahes :
HWND hWnd = GetDesktopWindow(); if (!hWnd) { return; } RECT rect; GetWindowRect(hWnd, &rect); Graphics::TBitmap* bmp = new Graphics::TBitmap; bmp->Height = rect.bottom; bmp->Width = rect.right; BitBlt(bmp->Canvas->Handle, 0 , 0 , bmp->Width, bmp->Height, GetDC(hWnd), 0, 0, SRCCOPY); bmp->SaveToFile("C:/test.bmp"); delete bmp;
Mit Kenntnis des Fenster-Handle (s.zB. FindWindow) lässt sich so jedes sichtbare Fenster screenshoten.
MfG
kpeter
-
blub1991 schrieb:
[...] wofür haltet ihr mich eigentlich?
Das willst du nicht wirklich beantwortet haben, oder?
-
Lies dir mal das Form->PaintTo mal in der Hilfe durch.
Damit kann mal von einen Steuerelement ein Bild machen und an einen TCanvas schicken. Und mit Form->PaintTo dann eben von der ganzen Form....