Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Multimedia (https://www.delphipraxis.net/16-multimedia/)
-   -   Text auf Canvas von transparentem PNG schreiben -Wie? (https://www.delphipraxis.net/176335-text-auf-canvas-von-transparentem-png-schreiben-wie.html)

torud 28. Aug 2013 11:51

Text auf Canvas von transparentem PNG schreiben -Wie?
 
Hallo Wissende,

mit folgendem Code erstelle ich eine transparente png-Datei.

Leider kann ich den Text nicht in der Ausgabe sehen. Was mache ich falsch?

Delphi-Quellcode:
procedure TForm1.Button3Click(Sender: TObject);
var
  pngText : TPNGObject;
begin
  pngText := TPNGObject.CreateBlank(COLOR_RGBALPHA, 16, 1920, 1080);

  pngText.Canvas.Font.Size := 55;
  pngText.Canvas.Brush.Style:=bsClear;
  pngText.Canvas.Font.Color := clRed;
  pngText.Canvas.Font.Name := 'Arial';
  pngText.Canvas.Font.Style:=[fsBold];
  pngText.Canvas.TextOut(0, 0, 'Hello World');

  pngText.SaveToFile('c:\temp\text_test.png');

end;
Ich nutze das PngImage in version 1.564

Blup 28. Aug 2013 12:25

AW: Text auf Canvas von transparentem PNG schreiben -Wie?
 
COLOR_RGBALPHA, 16,

Eventuell funktioniert diese Kombination nicht (16Bit für jeden einzelnen Farb- und den Alphakanal?).
Versuch mal so:

COLOR_RGBALPHA, 8,

torud 28. Aug 2013 12:43

AW: Text auf Canvas von transparentem PNG schreiben -Wie?
 
Vielen Dank für Deine Antwort,

leider brachte dieser Versuch nicht den gewünschten Effekt.

Der Text ist nicht zu sehen in der png-Datei.

Gibts sonst noch Möglichkeiten?

Namenloser 28. Aug 2013 13:14

AW: Text auf Canvas von transparentem PNG schreiben -Wie?
 
Die ganzen TCanvas-Methoden bauen auf der GDI auf, und diese unterstützt keinen Alphakanal. Deshalb funktioniert das so nicht.

Du könntest stattdessen Graphics32 benutzen, um das Bild zu erstellen, und dann anschließend das Ergebnis in ein TPNGObject kopieren und abspeichern.

Medium 28. Aug 2013 13:19

AW: Text auf Canvas von transparentem PNG schreiben -Wie?
 
Etwas genauer: Canvas.TextOut() schreibt bei 32-Bit Zielen die höchstwertigen 2 Bytes mit 0, da sie nicht verwendet werden. Bei einem 32-Bit PNG sind diese Bytes aber genau der Alphakanal, der bei 0 als voll durchsichtig gilt. Der Text dürfte also tatsächlich in dem Bild sein, nur halt voll transparent. Du könntest entweder in einem zweiten Durchlauf den Alphakanal manuell anpassen, oder besser wie vorgeschlagen eine Lib einsetzen, die "Alpha-Aware" ist. Letzteres erspart einem auch gerade bei Text einen Haufen Geraffel mit ClearType u.ä.

Namenloser 28. Aug 2013 13:28

AW: Text auf Canvas von transparentem PNG schreiben -Wie?
 
Zitat:

Zitat von Medium (Beitrag 1226510)
Etwas genauer: Canvas.TextOut() schreibt bei 32-Bit Zielen die höchstwertigen 2 Bytes mit 0, da sie nicht verwendet werden.

Noch genauer ;): Das höchstwertige eine Byte. In hexadezimaler Darstellung sind das dann zwei Zeichen (auch bekannt als Nibble).

Medium 28. Aug 2013 13:32

AW: Text auf Canvas von transparentem PNG schreiben -Wie?
 
Mist. Ich war gedanklich zwischen Bit- und Byteangaben hin und her gerissen, und hab's dann auch noch gemischt. Ich muss mal was essen :stupid:


Alle Zeitangaben in WEZ +1. Es ist jetzt 15:48 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz