Problem mit SetDIBits



  • Hallo,
    ich hab mir hier im Forum schon mehrere Beiträge durchgelesen und auch danach gegoogelt aber leider komme ich im Moment nicht weiter. Ich hab gehört, das Get/SetPixel zu langsam sind um viele Pixel zu manipulieren. Deshalb soll man GetDIBits und SetDIBits verwenden. Das Auslesen der Pixel funktioniert jetzt endlich, allerdings klappt das setzen von Pixel noch nicht, obwohl das Programm "SETZEN HAT FUNKTIONIERT" ausgibt.
    Muss man da für irgendetwas noch release oder flush oder sowas aufrufen damit sich die Änderung auch auf dem Bild bemerkbar macht?

    Noch eine Frage: HDC hdc=CreateCompatibleDC(GetDC(NULL)); <-- hab das jetzt einfach so übernommen wie ich es im Internet gefunden habe - verstehe aber ehrlich gesagt nicht was mir das bringt. Was soll überhaupt dieses HDC, ich hab doch mein Handle auf das Bitmap?!

    BITMAP bmp; 
    	BITMAPINFO bmpInfo; 
    	HBITMAP hBitmap = (HBITMAP) LoadImage(NULL, _T("E:\\Test2.bmp"), IMAGE_BITMAP, 0, 0, LR_LOADFROMFILE); 
    	if(hBitmap == NULL)
    	{
    		cout<<"Fehler beim öffnen!!"<<endl;
    		return 0;
    	}
    	HDC hdc=CreateCompatibleDC(GetDC(NULL)); 
    	assert(hdc); 
    	GetObject(hBitmap, sizeof(BITMAP), &bmp); 
    
    	bmpInfo.bmiHeader.biSize = sizeof(BITMAPINFOHEADER); 
    	bmpInfo.bmiHeader.biWidth = bmp.bmWidth; 
    	bmpInfo.bmiHeader.biHeight = bmp.bmHeight; 
    	bmpInfo.bmiHeader.biPlanes = 1; 
    	bmpInfo.bmiHeader.biBitCount = 24;  
    	bmpInfo.bmiHeader.biCompression = BI_RGB; 
    	bmpInfo.bmiHeader.biSizeImage = 0; 
    
    	BYTE* Farbe = new BYTE[bmp.bmWidth*bmp.bmHeight*3];
    	if (GetDIBits(hdc,hBitmap,0,2,Farbe,&bmpInfo,DIB_RGB_COLORS)) 
    	{ 
    		for(int i = 0; i < bmp.bmWidth*bmp.bmHeight*3; i+=3) cout<<"Blau: "<<(int)Farbe[i]<<"  Grün: "<<(int)Farbe[i+1]<<"  Rot: "<<(int)Farbe[i+2]<<endl;
    		cout<<"ENDLICH DRIN"<<endl;
    	}
    
    	for(int i = 0; i < bmp.bmWidth*bmp.bmHeight*3; i++) Farbe[i] = 5;
    	if(SetDIBits(hdc, hBitmap, 0, bmp.bmHeight, Farbe, &bmpInfo, DIB_RGB_COLORS)) cout<<"SETZEN HAT FUNKTIONIERT"<<endl;
    
    	delete[] Farbe;
    

    Auf jeden Fall vielen Dank für eine Antwort und viele Grüße

    Andreas



  • Ich denke bist Du im falschen Forum versuch es mal in der Win32-API hier.
    Ausserdem empfehle ich dir das Buch Windows-Programmierung | ISBN: 9783860631881gebraucht nicht teuer und (immer noch)sehr gut. Dort werden dir DIE Grundlagen beigebracht.


Anmelden zum Antworten