![]() |
Canvas.TextOut mit Text Shadow-Erweiterung
Einen wunderschönen guten Abend zusammen,
hatte mir vor ein paar Tagen gedacht, dass ich "schnell" mal eine TextOut-Methode schreibe, die mir einen Text auf ein Canvas druckt -- was das normale TextOut() bisher ja kann -- und eben dazu noch einen passenden Schatten, analog zum ![]() So, meine Idee war die folgende: ich drucke in ein Buffer-Bitmap (PixelFormat: pf32bit, AlphaFormat: afDefined) den Text (übliches TextOut), lasse einen Weichzeichner drüber laufen ( ![]() Ich hatte mir überlegt, das Bitmap komplett auf transparent, also bei jedem Pixel den Alpha-Kanal auf 0, zu setzen. Drucke ich den Text dann drauf, bleibt jedes Pixel transparent -> schlecht. Den Text direkt auf das Canvas drucken und darauf blurren ist blöde, da ja schon vorher etwas auf dem Canvas sein kann. Irgendwie fällt mir im Moment nichts ein, wie ich dem Problem beikommen könnte. Ich will doch einfach nur einen Text auf einen transparenten Layer drucken, diesen blurren und unter Beachtung des Alpha-Kanals diesen Layer auf ein Canvas bringen :wall: |
AW: Canvas.TextOut mit Text Shadow-Erweiterung
text auf ein Canvas malen, invertieren und als alphawerte für ein neues (komplett schwarzes) Bild hernehmen ;-)
Also quasi wie deine erste Lösung, nur statt einem schwarz/weiß übergang eben ein schwarz/transparent Übergang. (= statt einem Pixel mit wert 200 einen mit 0 und alpha = 55) |
AW: Canvas.TextOut mit Text Shadow-Erweiterung
[edit]irrelevant[/edit]
|
AW: Canvas.TextOut mit Text Shadow-Erweiterung
Zitat:
-- Edit: Bin evtl. doch fündig geworden -> ![]() ![]() |
AW: Canvas.TextOut mit Text Shadow-Erweiterung
Setze vor dem Textout den Hintergrund auf Transparent:
SetBkMode(Canvas.Handle,Windows.Transparent) Dann bleibt der Hintergrund unter dem Text erhalten. |
AW: Canvas.TextOut mit Text Shadow-Erweiterung
Wenn ich dann aber das den Gaussian Blur anwende, wird quasi alles geblurrt und das will ich ja nicht. Daher ja die Idee mit dem transparenten Puffer-Layer, der dann später auf das Canvas gepinselt werden soll.
|
AW: Canvas.TextOut mit Text Shadow-Erweiterung
Verstehe ich nicht, das Weichzeichnen ist doch schon auf dem Bitmap erfolgt.
Der wird jetzt auf den Canvas gezeichnet und dann anschließend an die gleiche Position nochmals den Text auf den Canvas mit transparentem Hintergrund ausgeben. Oder habe ich da was nicht mitgekriegt? |
AW: Canvas.TextOut mit Text Shadow-Erweiterung
Liste der Anhänge anzeigen (Anzahl: 1)
Anbei noch eine kleine Demo
|
AW: Canvas.TextOut mit Text Shadow-Erweiterung
Achso, du meintest den zweiten TextOut-Befehl auf dem eigentlichen Canvas. Dabei setze ich den Brush-Style auf bsClear, was ja den selben Effekt hat.
Mein Problem ist eigentlich nur, dass dieser geblurrte Puffer-Bitmap eine Hintergrundfarbe hat und diese beim Pinsel auf dem Canvas übernommen wird. Was ich damit meine ist klar? Bin gerade dabei ![]() |
AW: Canvas.TextOut mit Text Shadow-Erweiterung
Wenn du beim Blur den Alphakanal mit verarbeitest, hast du doch schon die richtigen Transparenzwerte. Du musst nur darauf achten, dass das Alpha vom weichzuzeichnenden Bitmap 255 bei der Schrift ist, und 0 sonst.
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 03:38 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz