Probleme mit GetDIBits()



  • Hallo zusammen!

    Der folgende Code soll einfach zum Test eine Bitmap von der Festplatte in ein HBITMAP laden und dann wieder in eine andere Datei speichern. Nur leider gibt GetDIBits() immer 0 zurück!

    SrcBmp= (HBITMAP) LoadImage(NULL,"C:\\test.bmp",0,0,0,LR_LOADFROMFILE);
    	HANDLE fileHandle= CreateFile("C:\\test2.bmp",GENERIC_READ | GENERIC_WRITE, (DWORD)0,NULL,CREATE_ALWAYS,FILE_ATTRIBUTE_NORMAL, (HANDLE)NULL);
    	DWORD bytes_to_write;
    	DWORD bytes_written;
    	HDC	hBitmapDC= CreateCompatibleDC(hdc);
    	void* bmpData;
    
    	BITMAPINFO bmpInfo;
    	BITMAPFILEHEADER bmpFileHeader;
    	ZeroMemory(&bmpFileHeader,sizeof(bmpFileHeader));
    	BITMAPINFOHEADER bmpInfoHeader;
    	ZeroMemory(&bmpInfoHeader,sizeof(bmpInfoHeader));
    
    	bmpInfoHeader.biSize=						sizeof(BITMAPINFOHEADER);
    	bmpInfoHeader.biHeight=						1024;
    	bmpInfoHeader.biWidth=						1024;
    	bmpInfoHeader.biPlanes=						1;
    	bmpInfoHeader.biBitCount=					24;
    	bmpInfoHeader.biCompression=				BI_RGB;
    	bmpInfoHeader.biSizeImage=					((((bmpInfoHeader.biWidth * bmpInfoHeader.biBitCount) + 31) & ~31) >> 3) * bmpInfoHeader.biHeight; 
    	bmpInfoHeader.biXPelsPerMeter=				0;
    	bmpInfoHeader.biYPelsPerMeter=				0;
    	bmpInfoHeader.biClrImportant=				0;
    
    	bmpInfo.bmiHeader=							bmpInfoHeader;
    
    	bmpFileHeader.bfOffBits=					sizeof(BITMAPFILEHEADER)+sizeof(BITMAPINFOHEADER);
    	bmpFileHeader.bfSize=						(3*bmpInfoHeader.biHeight*bmpInfoHeader.biWidth)+sizeof(BITMAPFILEHEADER)+sizeof(BITMAPINFOHEADER); 
    	bmpFileHeader.bfType=						0x4d42;
    	bmpFileHeader.bfReserved1=					0;
    	bmpFileHeader.bfReserved2=					0;
    
    	if(GetDIBits(hBitmapDC,SrcBmp,0, bmpInfoHeader.biHeight,&bmpData,&bmpInfo,DIB_RGB_COLORS)== 0)
    	{
    		MessageBox(0,"Error","",0);
    	}
    
    	bytes_to_write= sizeof(bmpFileHeader);
    	WriteFile(fileHandle,(void*)&bmpFileHeader,bytes_to_write,&bytes_written,NULL);
    
    	bytes_to_write= sizeof(bmpInfoHeader);
    	WriteFile(fileHandle,(void*)&bmpInfoHeader,bytes_to_write,&bytes_written,NULL);
    
    	bytes_to_write= bmpInfoHeader.biSizeImage;
    	WriteFile(fileHandle,(void*)&bmpData,bytes_to_write,&bytes_written,NULL);
    

    Findet jemand den Fehler?

    Gruß veryxRV



  • "The bitmap identified by the hbmp parameter must not be selected into a device context when the application calls this function."



  • Danke, hab ich jetzt rausgenommen. Funktioniert aber trotzdem nicht 😞


Anmelden zum Antworten