Einzelnen Beitrag anzeigen

Benutzerbild von MaBuSE
MaBuSE

Registriert seit: 23. Sep 2002
Ort: Frankfurt am Main (in der Nähe)
1.840 Beiträge
 
Delphi 10 Seattle Enterprise
 
#13

Re: Transparentes PNG in TImage drehen...Wie?

  Alt 8. Dez 2006, 13:48
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
(°¿°) MaBuSE - proud to be a DP member
(°¿°) MaBuSE - proud to be a "Rüsselmops" ;-)
  Mit Zitat antworten Zitat