![]() |
PngImageList.Draw() auf TImage.Canvas verliert AlphaKanal
Guten Abend zusammen,
vorab will ich erst mal meine Idee beschreiben: ich habe im Moment eine Ableitung von TPngImageList, welche einen Timer integriert hat und bei jedem Timer-Event das nächte Bild auf ein TargetImage zeichnet. So kann ich z.B. einen ![]() ![]() Nun will ich diese Idee allerdings etwas abstrahieren und eine Art "Linker" basteln, der als Verknüpfung zwischen einer TCustomImageList und einem TImage agiert, d.h. es liegen schon ein TImage und eine TImageList auf der Form und ich liefere eine weitere Komponente, mit der die Bidler aus der Liste auf die TImage-Instanz projeziert werden. Ich will meinen Code somit von der TPngImageList lösen und verallgemeinern. Somit will ich auch weniger Abhängigkeiten schaffen. So schön dieser Grundgedanke auch sein mag, ich habe beim Zeichnen (
Delphi-Quellcode:
) das Problem, dass wenn es sich um eine TPngImageList handelt, der AlphaKanal verloren geht -- es erscheint ein weißer Hintergrund. Die referenzierte ImageList ist ja eine TPngImageList, weswegen die Images darin einen AlphaKanal besitzen. Warum und wo geht denn dieser aber beim Aufruf der Draw-Methode verloren? Eine spezielle Behandlung dieser Klasse will ich unbedingt vermeiden, da das ja nicht Sinn und Zweck ist. Ist evtl. die TPngImageList schuld, da diese die Draw-Methode nicht überschreibt?
FImageList.Draw(...)
Lustigerweise ist es so, dass wenn ich auf auf eine TPaintBox male, der Hintergrund nicht weiß, sondern transparent ist. Ich habe daber bei meiner TImage-Instanz schon ziemlich viel bzgl. den Eigenschaften PixelFormat, AlphaFormat, ColorDepth und was weiß ich noch probiert -> ohne Erfolg. Vielleicht kann hier ja jemand Licht ins Dunkel bringen. |
AW: PngImageList.Draw() auf TImage.Canvas verliert AlphaKanal
Das liegt daran dass ein Image selbst nicht transparent ist, wenn Du nur ein Pixel setzt wird das ganze Image weiß initialisiert.
Das PNG wird sicher transparent gemalt (mal es mal doppelt um 10 Pixel versetzt, oder füll das Image vorher mit einem Bitmap). Ich verwende für solche Sachen meist eigene von TGrapicControl abgeleitete Komponenten. |
AW: PngImageList.Draw() auf TImage.Canvas verliert AlphaKanal
Das Problem liegt wohl daran, daß du auf einem TImage.Canvas zeichnest. Das TImage ist so ausgelegt, daß es seinen Inhalt aus dem Picture-Property zeichnet. Wenn ich in einem kleinen Testprogramm anstatt auf dem TImage.Canvas auf dem TForm.Canvas zeichne, kommt der Alpha-Kanal sehr wohl korrekt rüber. Das Problem ist hier also wohl eher das TImage.
|
AW: PngImageList.Draw() auf TImage.Canvas verliert AlphaKanal
Zitat:
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 10:55 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-2025 by Thomas Breitkreuz