Auf Backbuffer lässt sich nicht farbig zeichnen



  • Erstellt wird der Buffer folgendermaßen:

    hdc=GetDC(hWnd);
    				backbuffer=CreateCompatibleDC(hdc);
    				hbmp = CreateCompatibleBitmap(backbuffer, WNDWIDTH, WNDHEIGHT); //Bitmap erstellen
    				hbmpold = (HBITMAP)SelectObject(backbuffer, hbmp);           //Bitmap auswählen, altes speichern
    
    				hbrush = CreateSolidBrush(RGB(255, 255, 255));				//weissen Brush erstellen
    				FillRect(backbuffer, drawrec, hbrush);						//weiss malen
    

    Nun hab ich das Problem, dass weder SetPixel(...,RGB(..)) farbig zeichnet noch LineTo usw. wenn ich einen bestimmten farbigen Stift auswähle. In einem anderen Thread stand etwas von wegen SetPixel usw. arbeiten mit COLORREF strukturen, Bitmaps erwarten jedoch RGBQUAD Farbwerte. Wie kann ich da jetzt dennoch mit SetPixel usw. farbig malen?



  • Es scheint so als würde nur ein monochromes Bitmap erstellt 😕



  • MasterCounter schrieb:

    von wegen SetPixel usw. arbeiten mit COLORREF strukturen

    COLORREF ist keine Struktur, sondern ein primitiver Datentyp (unsigned int).
    Zeig mal mehr Code. Wie zeichnest Du in Deinen Back-Buffer?



  • ganz einfach, nur ums zu testen 😛 Die Linien sind aber immer schwarz, egal ob ich extra einen Pen erstelle (was man bei SetPixel doch gar nicht muss, denk ich mal) oder ob ichs ohne mache...

    hdc=GetDC(hWnd);
    backbuffer=CreateCompatibleDC(hdc);
    hbmp = CreateCompatibleBitmap(backbuffer, WNDWIDTH, WNDHEIGHT); //Bitmap erstellen
    hbmpold = (HBITMAP)SelectObject(backbuffer, hbmp);           //Bitmap auswählen, altes speichern
    
    hbrush = CreateSolidBrush(RGB(255, 255, 255));                //weissen Brush erstellen
    FillRect(backbuffer, drawrec, hbrush);                        //weiss malen         
    
    x=0;
    y=0;
    
    while(x<WNDWIDTH && y<WNDHEIGHT)
    {
    SetPixel(backbuffer,(int)x,(int)y,RGB(255,0,0));
    x++;
    y++;
    }
    
    BitBlt(hdc,deleterc->left,deleterc->top,deleterc->right,deleterc->bottom,backbuffer,deleterc->left,deleterc->top,SRCCOPY);
    // Freigabe der Objekte
    SelectObject(backbuffer, hbmpold);
    DeleteObject(hbmp);
    DeleteDC(backbuffer);
    ReleaseDC(hWnd, hdc);	
    DeleteObject(hbrush);
    


  • Gib bei CreateCompatibleBitmap() nicht 'backbuffer' sondern 'hdc' an!

    Das Handle das CreateCompatibleDC() ist standardmässig mit ner 1x1 großen Monochrom-Bitmap versehen, daher wird die Bitmap die CreateCompatibleDC() dann erzeugt auch monochrom 😉



  • läuft jetzt -.- Ohne Witz, manchmal könnt ich meinen Kopf runterreissen und gegen ne Wand prügeln.... 🙄 Vielen, vielen Dank an dich! 👍


Anmelden zum Antworten