Zitat von
Mavarik:
Ein TImage kann diese Informationen nicht speichern. Nach dem Laden ist der Alpha-Kanal weg. Oder???
Das ist nicht ganz richtig.
TImage kann über die Filter (z.B. pngdelphi) auch mit PNG Dateien umgehen.
Da das TImage ja auch wissen muß wie es gezeichnet wird müssen die Infos ja irgendwo da drin sein
Also:
- TImage hat eine Eigenschaft Picture
- TPicture hat eine Eigenschaft Graphic
- Graphic ist vom Typ TGraphic.
- ABER je nach dem was das TImage beinhaltet steckt da ein Nachkomme von TGraphic drin, der das Bild und alle Informationen bereithält.
In unserem Fall ein TPNGObject.
In der Delphi Onlinehilfe steht:
Graphic (Eigenschaft von TPicture)
Die Eigenschaft Graphic gibt die im TPicture-Objekt enthaltene Grafik an.
property Graphic: TGraphic;
Beschreibung
Mit Graphic legen Sie den Grafiktyp fest, die das TPicture-Objekt enthält. Ein TPicture-Objekt kann Grafiken des Typs Bitmap, Symbol, Metadatei oder benutzerdefinierte Grafikklassen enthalten.
Folgender Code sollte Dein Problem lösen:
(gibt aber Fehler, wenn Im TImage kein Bild geladen ist, das sollte mit Assigned() noch abgefangen werden.)
Delphi-Quellcode:
procedure TForm1.BitBtn1Click(Sender: TObject);
var x: TPNGObject;
begin
// Ist da überhaupt ein PNG drin?
if Image1.Picture.Graphic is TPngObject then
begin
// TPngObject(Image1.Picture.Graphic) ist ein konstanter Ausdruck
// und kann nicht als Var Parameter übergeben werden, deshalb
// Der Umweg über x ;-)
x := Image1.Picture.Graphic as TPngObject;
SmoothRotate(x, 20);
end;
end;
Viel Spaß
MaBuSE