5 Stimmen

Zeichnen Sie Text auf einem .Net-Control mit negativer Farbe des Hintergrunds - mischen

Ich möchte eine Fortschrittsleiste mit Prozentangaben in der Mitte zeichnen, aber ich möchte, dass der Text eine negative (kontrastierende) Farbe zum Hintergrund hat.

Der Teil des Textes, der über dem gefüllten Abschnitt der Fortschrittsleiste liegt, soll weiß sein und der Teil über dem ungefüllten Abschnitt soll ebenfalls weiß sein.

Ich könnte dies einfach durch "Mogeln" machen

  • den schwarzen Teil des Textes zuerst malen
  • den Fortschrittsbereich malen (er würde den zu versteckenden Teil abdecken)
  • den weißen Text nur über dem Fortschrittsbereich malen (durch Clipping)

Der Leistungseinfluss des zweimaligen Malens des Textes ist in dieser Anwendung vernachlässigbar, aber ich frage mich, ob es eine einfache Möglichkeit gibt, dies in nur zwei Schritten zu tun (wie beispielsweise die Fortschrittsanzeige irgendwie den bereits gemalten Text invertieren kann) mit Blending.

4voto

Hans Passant Punkte 894572

Was du tust, ist in Ordnung. Alte Tricks wie SetROP2() funktionieren nicht mehr mit Text, der anti-aliased wird, besonders bei ClearType-Rendering. Das Erhalten der Aliasing-Pixel mit der falschen Farbe ist sehr auffällig. Graphics.CompositingMode unterstützt die Effekte dementsprechend nicht mehr.

0voto

Rhapsody Punkte 5942

Sie können XOR verwenden, um die negative (invertierte) Farbe zu berechnen;

Öffentliche Funktion InvertColor(Farbe Als Long) Als Long
    Zurückgeben (Farbe Xor &HFFFFFF)
End Function

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X