Rechteck invers zeichnen



  • Hallo,

    bietet das GDI eine Möglichkeit, ein Rechteck invers zu zeichnen? Also dass das, was vorher weiß war, nun schwarz ist, das was gelb war, blau ist, u.s.w., also eigentlich genau so, wie es der Edit-Cuursor tut?

    Bin für Antworten dankbar, Phobos 🙂



  • Du kannst dir die Farben ja auch neu ausrechnen und dann dein Rechteck mit diesen Farben zeichnen

    void CTestfarbeDlg::OnButton1() 
    {
       COLORREF color = RGB(255,255,0);   //Farbe
       static invert_zeichnen = false;    //"Schalter" zwischen den Farben
    
       CDC *dc = GetDC();
       CBrush brush;
    
       if(invert_zeichnen)
          brush.CreateSolidBrush(InvertColor(color));    //invertierte Farbe
       else
          brush.CreateSolidBrush(color);                 //origionale Farbe
    
       CBrush *OldBrush = dc->SelectObject(&brush);
    
       dc->Rectangle(0,0,30,30);
    
       dc->SelectObject(OldBrush);
    
       if(invert_zeichnen)    //nächstesmal die andere Farbe verwenden
          invert_zeichnen = false;
       else
          invert_zeichnen = true;
    }
    
    COLORREF CTestfarbeDlg::InvertColor(COLORREF farbe)
    {
       int rot   = GetRValue(farbe)-255;
       int gruen = GetGValue(farbe)-255;
       int blau  = GetBValue(farbe)-255;
    
       return RGB(-rot,-gruen,-blau);
    }
    

    die Methode InvertColor() dreht dir die Farbe um.

    MFG, Sigi

    PS: Ausprobieren und zweimal auf den Button drücken



  • Das würde allgemein wohl funktionieren, aber das Problem ist, dass der Bereich unter dem Rechteck nicht unbedingt einfarbig ist. Da soll dann Pixel für Pixel invers werden.



  • Achso!
    Wenn das ganze in einem CDC liegt dann kannst du es mit der Funktion BitBlt(...)
    und mit dem Flag SRCINVERT (letzter Barameter) das "Bild" invers ausgeben.



  • Oh, gute Idee. Dann packe ich mein Rechteck halt vorher in so nen DC. Vielen Dank 😃


Anmelden zum Antworten