Bitmap erzeugen



  • Hallo!
    Ich versuche eine Bitmap aus einem Array zu erzeugen, doch so wie ich das vorhabe funktioniert es nicht.

    static BYTE Pixel[6][5] = {0,255,0,255,0,0,		//Bitmap Daten
    							   0,255,0,255,0,0,
    							   0,255,0,255,0,0,
    							   0,255,0,255,0,0,
    							   0,255,0,255,0,0};
    
    	static HBITMAP hBitmap;							
    	static HDC hdcmem;							
    	static HDC hdc;
    
                            hdc = GetDC (hwnd);
    
    						hdcmem = CreateCompatibleDC (hdc);
    						hBitmap = CreateBitmap (6,5,1,8,Pixel);
    						SelectObject (hdcmem,hBitmap);
    
    						BitBlt (hdc,200,100,5,5,hdcmem,0,0,SRCCOPY);
    
    						DeleteObject (hBitmap);
    						DeleteDC (hdcmem);
    						ReleaseDC (hwnd,hdc);
    

    Das Problem tritt Bei SelectObject auf, da hier eine 0 Zurückgegeben wird!



  • Ich habe einen Code gefunden, mit dem es nun Funktioniert:

    hdc = GetDC (hwnd);
    
    						hBitmap = CreateBitmap (100,100,1,32,Pixel);
    						hdcmem = CreateCompatibleDC(NULL);
    					    hBitmapPrev = (HBITMAP)SelectObject( hdcmem, hBitmap );
    
    						BitBlt( hdc, 50, 50, 100, 100, hdcmem, 0, 0, SRCCOPY );
    
    						SelectObject( hdcmem, hBitmapPrev );
    						DeleteDC( hdcmem );
    

    Kann mir denn mal jemand genau Erklären was die Funktionen CreateCompatibleDC und SelectObject machen?



  • Him

    CreateCompatibleDC erzeugt dir einen DeviceContext im Speicher, unter dem dann mit SelectObject dein Bitmap ausgewählt wird. Dann kannst du ins Bitmap schreiben. Der DeviceContext gibt Informationen über z.B. über die verwendete Farbtiefe heraus.

    BitBlt holt sich dann die Daten aus dem DC des Bitmaps und stellt das im aktuellen (Bildschirm-)DC dar

    gruß
    Martin



  • Das Problem ist, dass meine Bitmap bei dieser Methode immer 32Bit haben muss, bei anderen Bit-Werten wird nichts angezeigt.

    Das zweite Problem ist, dass ich immer wieder CreateBitmap neu aufrufen muss, wenn ich etwas an dem "Pixel"-Array verändere, sonst bekomme ich nur die alten Daten angezeigt. ich nehme mal an, dass bei Createbitmap Speicher kopiert wird, was doch eigentlich die Geschwindigkeit meines Programms verlangsamen müsste.


Anmelden zum Antworten