![]() |
BMP (Bitmap) Animator
Liste der Anhänge anzeigen (Anzahl: 1)
Der BMP (Bitmap) Animator
Aktuelle Version : 0.3 Da häufig mal verlangt wurde, dass es kleine Animationen in Programmen geben sollte und ich da keine Lust hatte mir immer was neues einfallen zu lassen habe ich diese Unit geschrieben. Diese Unit ist im Stande ein Format, ich habe es jetzt mal ".anibmp" genannt, einzulesen und die Bilddaten zu animieren. In dieser Version der Unit fehlen noch ein paar Fehlerabfragen jedoch ist sie so schon in einigen Programmen getestet. Da die Zeitberechnung der Animation in einen Thread ausgelagert ist und die Callback-Funktion nur einen Pointer zu den Bilddaten bekommt, ist die Animation, wenn man sie noch mit ![]() Mit einem beiligendem Tool namens "BMP Animator.exe" können diese ".anibmp"-Dateien erstellt werden. Als Ausgangsbasis dienen hierbei normale Bitmaps. Der "BMP Animator" kann auch die erstellten Dateien sofort abspielen um zu sehen ob Fehler aufgetreten sind. Die Klasse kann:
Funktions-Beschreibungen Constructor:
Delphi-Quellcode:
Dies sind die Constructor der TAniBMP-Class.
constructor TAniBMP.Create(); Overload;
Animation Laden:
Delphi-Quellcode:
Hiermit kann die Animation die das Objekt machen soll geändert werden.
procedure TAniBMP.LoadFromFile(const Filename : String);
procedure TAniBMP.LoadFromStream(const Stream : TStream); Einen Frame Extrahieren:
Delphi-Quellcode:
Wenn die Funktion erfolgreich ist liefert sie 0 zurück und bmp ist mit dem angegeben Frame gefüllt.
function TAniBMP.GetFrame(FrameID : Integer; var bmp : TBitmap) : Integer;
Animation starten:
Delphi-Quellcode:
Startet die Animation mit der angegeben CallbackID.
function TAniBMP.start(CallbackID : Integer = 0) : Boolean;
Animation stoppen:
Delphi-Quellcode:
Stoppt die Animation mit der angegeben CallbackID.
procedure TAniBMP.stop(CallbackID : Integer = 0);
Animation stoppen:
Delphi-Quellcode:
Pausiert eine Animation.
procedure TAniBMP.pause(Pause : Boolean; CallbackID : Integer = 0);
function TAniBMP.IstPausiert(CallbackID : Integer = 0) : Boolean; Eigenschafts-Beschreibungen
Delphi-Quellcode:
OnAnimate wird für jedes Frame aufgerufen.
TAniBMP.OnAnimate = procedure(ID : Integer; P: Pointer);
Delphi-Quellcode:
Zeit in Millisekunden in denen die Frames geredert werden sollen.
TAniBMP.Interval : Integer;
Delphi-Quellcode:
Das erste Frame, des zu der Animation gehört.
TAniBMP.StartFrame : Integer;
Delphi-Quellcode:
Das letzte Frame, des zu der Animation gehört.
TAniBMP.EndFrame : Integer;
Delphi-Quellcode:
Anzahl der Frames, die die Animation besitzt.
TAniBMP.AnzFrames : Integer; (readonly)
Delphi-Quellcode:
Soll die Animation vorwärts oder rückwärts abgespielt werden?
TAniBMP.Backward : Boolean;
TRUE = Rückwärts
Delphi-Quellcode:
Sollen Execptions ausgegeben werden.
TAniBMP.Exceptions : Boolean;
Delphi-Quellcode:
Last Error beinhaltet die letzte Errornachricht.
TAniBMP.LastError : String;
Ist ganz nützlich wenn Exceptions ausgeschaltet sind. Changelog: Version 0.3
Version 0.2
Ich habe die Unit gestestet und zur Zeit keine Fehler gefunden (Rechtschreibfehler ausgenommen). Trotzdem kann ich nicht garantieren, dass es Fehler gibt und es zu Datenverlust führen kann :P |
Re: BMP (Bitmap) Animator
Die Klasse TAniBMP hat zwei Aufgaben, die meiner Ansicht in zwei getrennte Klassen getrennt gehören.
Verwalten/Bereitstellen der Bilddaten, dazu gehört: - Laden - Hinzufügen und Entfernen einzelner Bilder (fehlt) - Speichern (fehlt) Hier könnte man überlegen, ob das Dateiformat in dieser Form sinnvoll ist. Zumindest Bilder gleicher Größe und Farbtiefe kann man gut auch in einer großen Bitmap unterbringen. Alternativ könnte man auch lediglich das Anfangsbild und für jedes folgende nur die Differenzinformationen speichern. Das lässt sich sehr gut komprimieren. Erstellen einer Animation, dazu gehört: - Parameter setzen - Starten und Stoppen Wenn zum Beispiel zwei getrennte Animationen mit den selben Bilddaten laufen sollen (z.B. 2 Männchen), müssen die Bilddaten nicht unbedingt auch mehrfach geladen werden. Die Funktion Start_Animation enthält Default-Parameter die zu einer Exception führen. An dieser Stelle würde ich eher mit Property arbeiten und auf Parameter verzichten. (z.B. auch OnAnimation: TBitmapCallback) Als Methodennamen würde Start, Stop genügen (was sollte ich sonst starten als die Animation). Pause könnte auch ein read/write Property sein. |
Re: BMP (Bitmap) Animator
Danke für deine Anregungen.
|
Re: BMP (Bitmap) Animator
ist jetzt vielleicht ungerecht damit zu kommen...
...aber für eine Animation in meinem kleinen Backupprogramm: Verwendete ein kleines Tool bmp2avi um aus Windows-Bitmaps ein AVI zu erzeugen. Naja und dann halt die Standard-Komponente TAnimate. AVIs sind dann auch recht klein und problemlos als Ressource einzubinden gewesen. |
Re: BMP (Bitmap) Animator
Hallo,
ich habe die Klasse nochmal komplett überarbeitet und noch ein paar schöne kleine Funktionen hinzugefügt.
@Satty67: Ich habe vor in diese Klasse noch mehr möglichkeiten einzubauen. So, dass man sie nachher auch für mehr sachen benutzten kann. Mit der Standard-Komponente TAnimate habe ich da immer so meine Probleme ^^ die macht das nie so wie ich das genau will |
Re: BMP (Bitmap) Animator
Hallo, ich habe deine Klasse jetzt nicht getestet, aber ich würde mich für eine Sprache (englisch) entscheiden :P
Also statt "IstPausiert" einfach "Paused" und "AnzFrames" dann "FrameCount". MfG xZise |
Alle Zeitangaben in WEZ +1. Es ist jetzt 08:45 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