Antialiased Text auf transparenter Bitmap

8

Ich möchte antialiased Text auf einer transparenten Bitmap zeichnen und das Antialiasing als Alpha-Blender-Pixel gezeichnet haben. Auf diese Weise kann ich die Bitmap auf eine beliebige Farboberfläche (oder ein Bild) zeichnen, und das Antialiasing sieht immer noch gut aus.

Hier ist ein vereinfachtes Beispiel, das das Problem zeigt:

%Vor%

Und hier ist das Ergebnis:

alt text http://img194.imageshack.us/img194/9065/captureotd.png

Das ultimative Ziel ist es, mit UpdateLayeredWindow mein transparentes Alpha-Blended-Fenster zu zeichnen. Ich erstelle eine Conky-ähnliche Anwendung, und ich möchte ClearType-Rendering für Text verwenden können (natürlich ohne Antialiasing).

Momentan schnappe ich den Bildschirm hinter dem Formular, zeichne das und zeichne dann meinen Text. Es sieht gut aus, muss aber aktualisiert werden und ist langsam zu zeichnen. Alle anderen Ideen, um Zeichnungstext auf dem Desktop zu erreichen, wären ebenfalls willkommen.

    
iano 17.08.2009, 23:39
quelle

2 Antworten

15

Ihr Text wird so angezeigt, wie Sie ihn haben, weil Sie den ClearType Subpixel Anti-Aliasing-Modus aktiviert haben (dies ist der Standard unter Vista und höher). ClearType, definitionsgemäß, kann nicht gut mit dem Alpha-Kanal spielen, da es Farben mischt und somit nicht hintergrund-agnostisch ist. Es ignoriert also den Alphakanal und mischt sich mit Schwarz (was sonst Ihre transparente Farbe ist). Sie müssen einfaches Graustufen-Anti-Aliasing für den gewünschten Effekt aktivieren:

%Vor%     
Pavel Minaev 18.08.2009, 00:22
quelle
1

Ich bin mir nicht sicher, ob es wirklich notwendig ist, aber wenn Sie Alpha-Blending durchführen wollen, sollten Sie ein 32-Bit-Bild angeben:

%Vor%

Mit Ihrem Beispiel konnte ich den Text durch Hinzufügen eines Textrendering-Hinweises anständig aussehen lassen:

%Vor%

Geht das, was Sie wollen, oder verstecken Sie das Problem einfach?

    
Tim Sylvester 18.08.2009 00:12
quelle

Tags und Links