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
BitBlt benutzt, auch bei schnellen Animationen flüssig. Wie das ganze aussieht wenn viele Animationen zur gleichen Zeit laufen habe ich noch nicht getestet.
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:- Animationen abspielen
- Animationen pausieren
- Animationen rückwärtsablaufen lassen
Funktions-Beschreibungen
Constructor:
constructor TAniBMP.Create(); Overload;
Dies sind die Constructor der TAniBMP-Class.
Animation Laden:
Delphi-Quellcode:
procedure TAniBMP.LoadFromFile(const Filename : String);
procedure TAniBMP.LoadFromStream(const Stream : TStream);
Hiermit kann die Animation die das Objekt machen soll geändert werden.
Einen Frame Extrahieren:
function TAniBMP.GetFrame(FrameID : Integer; var bmp : TBitmap) : Integer;
Wenn die Funktion erfolgreich ist liefert sie 0 zurück und bmp ist mit dem angegeben Frame gefüllt.
Animation starten:
function TAniBMP.start(CallbackID : Integer = 0) : Boolean;
Startet die Animation mit der angegeben CallbackID.
Animation stoppen:
procedure TAniBMP.stop(CallbackID : Integer = 0);
Stoppt die Animation mit der angegeben CallbackID.
Animation stoppen:
Delphi-Quellcode:
procedure TAniBMP.pause(Pause : Boolean; CallbackID : Integer = 0);
function TAniBMP.IstPausiert(CallbackID : Integer = 0) : Boolean;
Pausiert eine Animation.
Eigenschafts-Beschreibungen
TAniBMP.OnAnimate = procedure(ID : Integer; P: Pointer);
OnAnimate wird für jedes Frame aufgerufen.
- P ist ein Pointer zu dem Bitmap
- ID ist die CallbackID der Animation
TAniBMP.Interval : Integer;
Zeit in Millisekunden in denen die Frames geredert werden sollen.
TAniBMP.StartFrame : Integer;
Das erste Frame, des zu der Animation gehört.
TAniBMP.EndFrame : Integer;
Das letzte Frame, des zu der Animation gehört.
TAniBMP.AnzFrames : Integer; (readonly)
Anzahl der Frames, die die Animation besitzt.
TAniBMP.Backward : Boolean;
Soll die Animation vorwärts oder rückwärts abgespielt werden?
TRUE = Rückwärts
TAniBMP.Exceptions : Boolean;
Sollen Execptions ausgegeben werden.
TAniBMP.LastError : String;
Last Error beinhaltet die letzte Errornachricht.
Ist ganz nützlich wenn Exceptions ausgeschaltet sind.
Changelog:
Version 0.3- Der Klasse Eigenschaften hinzugefügt und dafür die Übergabeparameter aus der Startfunktion entfernt
- Die Callbackfunktion heißt nun TAniBMP.OnAnimate
- Einige Funktionen umbenannt da die Benennungen unsinig waren
- Animationen können Rückwärts abgespielt werden (TAniBMP.Backward : Boolean
.
- Mehr als eine Animation sind nun möglich. Dazu kommt auch noch, dass alle Animationen mit verschiedenen Eigendschaften gestartet werden können.
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