Screenshot , schon wieder ein Problem :-



  • Was ist daran so verkehrt ??

    int main()
    {
    	HBITMAP bmpScreen;
    	HWND hwndScreen;
    	HDC hdcScreen;
    	void *pixel;
    	HDC hdcCompatibleScreen;
    	BITMAPINFO bmpinfo;
    	BITMAPFILEHEADER bmpfh;
    	BITMAPINFOHEADER bmpih;
    	HGDIOBJ OldObj;
        DWORD bytes_written; 
    
    	HANDLE file;
    
    	hwndScreen = GetDesktopWindow();
    	hdcScreen = GetDC(hwndScreen);
    
    	hdcCompatibleScreen = CreateCompatibleDC(hdcScreen);
    
    	bmpih.biSize = sizeof(BITMAPINFOHEADER);
    	bmpih.biHeight = 768;
    	bmpih.biWidth  = 1024;
    	bmpih.biPlanes = 1;
    	bmpih.biBitCount = 24;
    	bmpih.biCompression = BI_RGB;
    	bmpih.biSizeImage = (bmpih.biWidth * bmpih.biBitCount)*bmpih.biHeight;
    	bmpih.biXPelsPerMeter = 0; 
        bmpih.biYPelsPerMeter = 0; 
        bmpih.biClrImportant = 0; 
    
    	bmpinfo.bmiHeader  = bmpih;
    
    	bmpScreen = CreateDIBSection(hdcScreen,&bmpinfo,DIB_RGB_COLORS,(void**)pixel,NULL,NULL);
    
    	OldObj = SelectObject(hdcCompatibleScreen,bmpScreen);
    	BitBlt(hdcCompatibleScreen,0,0,1024,768,hdcScreen,0,0,SRCCOPY);
    
    	bmpfh.bfOffBits = sizeof(BITMAPFILEHEADER)+sizeof(BITMAPINFOHEADER); 
    	bmpfh.bfSize = (3*bmpih.biHeight*bmpih.biWidth)+sizeof(BITMAPFILEHEADER)+sizeof(BITMAPINFOHEADER); 
        bmpfh.bfType=0x4d42; 
        bmpfh.bfReserved1 = 0; 
        bmpfh.bfReserved2 = 0; 
    
    	file=CreateFile(L"c:\\mybmp.bmp",GENERIC_READ | GENERIC_WRITE,(DWORD)0,NULL,CREATE_ALWAYS,FILE_ATTRIBUTE_NORMAL,NULL);
    
    	WriteFile(file,&bmpfh,sizeof(BITMAPFILEHEADER),&bytes_written,NULL);
    	WriteFile(file,&bmpih,sizeof(BITMAPINFOHEADER),&bytes_written,NULL);
    	WriteFile(file,&pixel,bmpih.biSizeImage,&bytes_written,NULL);
    
    }
    


  • falsches forum



  • Jop sorry, den Fehler hab ich auch noch nicht beschrieben. Hab ausversehen zu fürh auf senden gedrückt.

    Ich kann es debuggen aber danach treten tonnenweise Fehler auf !!!



  • BlackZero schrieb:

    Ich kann es debuggen aber danach treten tonnenweise Fehler auf !!!

    Das hilft uns nicht, was für fehler?



  • Ich bin nun soweit ein file wird erstellt und es ist alles schwarz, toll.



  • Heute ist nicht so mein Tage den Quellcode hab ich doch vergessen

    int main()
    {
    	HBITMAP bmpScreen;
    	HWND hwndScreen;
    	HDC hdcScreen;
    	HBITMAP hbmScreen;
    	HDC hdcCompatibleScreen;
    	BITMAPINFO bmpinfo;
    	BITMAPFILEHEADER bmpfh;
    	BITMAPINFOHEADER bmpih;
    	HGDIOBJ OldObj;
        DWORD bytes_written; 
    	int* pixels = new int[1024*768];
    
    	HANDLE file;
    
    	hwndScreen = GetDesktopWindow();
    	hdcScreen = GetDC(hwndScreen);
    
    	hdcCompatibleScreen = CreateCompatibleDC(hdcScreen);
    
        ZeroMemory(&bmpih,sizeof(BITMAPINFOHEADER));
    	bmpih.biSize = sizeof(BITMAPINFOHEADER);
    	bmpih.biHeight = 768;
    	bmpih.biWidth  = 1024;
    	bmpih.biPlanes = 1;
    	bmpih.biBitCount = 24;
    	bmpih.biCompression = BI_RGB;
    	bmpih.biSizeImage = ((((bmpih.biWidth * bmpih.biBitCount) + 31) & ~31) >> 3) * bmpih.biHeight; 
    	bmpih.biXPelsPerMeter = 0; 
        bmpih.biYPelsPerMeter = 0; 
        bmpih.biClrImportant = 0; 
    
    	bmpinfo.bmiHeader=bmpih;
    
    	hbmScreen = CreateCompatibleBitmap(hdcScreen,1024,768); 
    
    	//hOLT ES VOM DESKTOP UND kOPIERT ES IN EIN rECTANGEL
    	BitBlt(hdcCompatibleScreen,0,0,1024,768,hdcScreen,0,0,SRCCOPY);
    	GetDIBits(hdcCompatibleScreen,hbmScreen,0,768,pixels,&bmpinfo,DIB_RGB_COLORS);
    
    	bmpfh.bfOffBits = sizeof(BITMAPFILEHEADER)+sizeof(BITMAPINFOHEADER); 
    	bmpfh.bfSize = (3*bmpih.biHeight*bmpih.biWidth)+sizeof(BITMAPFILEHEADER)+sizeof(BITMAPINFOHEADER); 
        bmpfh.bfType=0x4d42; 
        bmpfh.bfReserved1 = 0; 
        bmpfh.bfReserved2 = 0; 
    
    	file= CreateFile(L"c:\\mybmp.bmp",GENERIC_WRITE,0,0,OPEN_ALWAYS,0,0); 
    
    	WriteFile(file,&bmpfh,sizeof(BITMAPFILEHEADER),&bytes_written,NULL);
    	WriteFile(file,&bmpih,sizeof(BITMAPINFOHEADER),&bytes_written,NULL);
    	WriteFile(file,pixels,bmpih.biSizeImage,&bytes_written,NULL);
    
    }
    


  • Dieser Thread wurde von Moderator/in HumeSikkins aus dem Forum C++ in das Forum WinAPI verschoben.

    Im Zweifelsfall bitte auch folgende Hinweise beachten:
    C/C++ Forum :: FAQ - Sonstiges :: Wohin mit meiner Frage?

    Dieses Posting wurde automatisch erzeugt.



  • CreateCompatibleBitmap erstellt eine DDB, GetDIBits will ne DIB.
    Wie du nen DC in ein file schreibst findest du hier:
    http://www.c-plusplus.net/forum/viewtopic-var-t-is-39400.html


Log in to reply