2012-04-13 14 views
4

Windows XP zeichnet Symboltext mit einem schönen Schatten, der hilft, den Text auf verschiedenen Hintergründen zu lesen. Die Schriftfarbe ist weiß und der Schatten ist schwarz (wenn der Desktop-Hintergrund weiß ist) oder gar kein Schatten (wenn der Desktop-Hintergrund schwarz ist).Wie zeichnet man Text mit einem Schatten wie Windows XP auf Desktop-Icons?

So gibt es zwei Teilaufgaben:

  1. Wie der Schatten gezeichnet wird? Es ist kein einfacher x, y-Offset des Textes; Der Schatten sieht für mich eher wie eine Unschärfe aus.

  2. Wie macht man Schatten so, dass er sich so verhält, wie er auf weißen Hintergründen besser sichtbar wird und bei Dunkelheit weniger sichtbar ist?

Ich brauche eine Lösung für GDI (nicht GDI +).

Antwort

0

Inspiriert von Chris Becke's answer in this thread

Wenn Sie schnell brauchen und nicht so schmutzig Lösung haben, können Sie auch Folgendes tun:

Zeichnen Sie einen Text auf einem schwarzen Bitmap dann Alpha-Blending mit dem primären hdc aber: verschiebe das Zielrechteck -1 .. 2 um x und -1 .. 3 um y (dh mehrere Mischungen in einer Schleife). Um Schattenfading-Effekte zu erzielen, modifizieren Sie SourceConstantAlpha entsprechend für äußere Mischungen (| x |> 1 oder | y |> 1).

Dies ist eine grobe Methode, fühlen Sie sich frei, mit Details zu experimentieren.

Ich bin nicht sicher über die Leistung und visuelle Qualität einer solchen Lösung, aber es kann in bestimmten Fällen ausreichend sein.

0

Siehe auch die DrawShadowText Funktion hier: Writing Transparent Text on Image

Der Funktionsprototyp ist dies: procedure DrawShadowText (aCanvas: TCanvas; CONST Text: string; CONST X, Y, Opazität: Integer; Textfarbe, Shadow: TColor);
Es ist bereit, verwendet zu werden.

Verwandte Themen