C# - Animált GIF lejátszása programból

forráskód letöltése
Animált képek lejátszására alkalmas megoldást keresünk mostani cikkünkben. A megoldás minden olyan formátum esetén alkalmazható, mely idő alapú képeket tartalmaz. Vagyis minden képkockának előre meghatározott ideig kell látszódnia.
A megvalósításhoz az ImageAnimator osztály felhasználására lesz szükségünk. Ismerkedjünk meg először ennek lehetőségeivel:
Animate
Osztály: System.Drawing.ImageAnimator
public static void Animate(
Image image,
EventHandler onFrameChangedHandler
);
Az animáció indításához az Animate függvényt kell meghívunk.
Paraméterek
Image image
Az image paraméterben kell megadni a lejátszani kívánt animációt.
EventHandler onFrameChangedHandler
Meg kell adnunk egy eseménykezelő függvényt, mely akkor hívódik meg, amikor az animációban a következő képet kell megjeleníteni.
CanAnimate
Osztály: System.Drawing.ImageAnimator
public static bool CanAnimate(
Image image
);
A CanAnimate függvénnyel ellenőrizhetjük, hogy a megadott Image osztály tartalmaz-e idő alapú képsorokat.
Paraméterek
Image image
Az ellenőrizendő képet kell megadnunk.
Visszatérési érték
Igaz, ha az Image osztályban lévő kép animálható.
StopAnimate
Osztály: System.Drawing.ImageAnimator
public static void StopAnimate(
Image image,
EventHandler onFrameChangedHandler
);
A StopAnimate leállítja a már elindított animációt.
Paraméterek
Image image
A leállítani kívánt animációt tartalmazó Image osztály.
EventHandler onFrameChangedHandler
Meg kell adnunk egy eseménykezelő függvényt, mely akkor hívódik meg, amikor az animációban a következő képet kell megjeleníteni.
UpdateFrames
Osztály: System.Drawing.ImageAnimator
public static void UpdateFrames();
Következő képkockára lépteti az animációt, így az Image kirajzolásakor már a soron következő kép jelenik meg.
UpdateFrames
Osztály: System.Drawing.ImageAnimator
public static void UpdateFrames(
Image image
);
Következő képkockára lépteti az animációt, így az Image kirajzolásakor már a soron következő kép jelenik meg.
Paraméterek
Image image
Az image paraméterben megadott kép kerül léptetésre.
A példaprogram
Az animációhoz szükségünk lesz egy animált GIF-re, melyet a program indulásakor betöltünk egy Bitmap osztályba.
Bitmap gif = new Bitmap(„1.gif”);
Az animáció elindítását az Animate függvényre bízzuk.
    private void button1_Click(object sender, System.EventArgs e)
    {
      ImageAnimator.Animate(gif, new EventHandler(OnNextFrame));
    }
Animate függvénynek megadtuk az OnNextFrame nevű függvényünket, mely akkor kerül meghívásra, ha letelik az az idő, ami után a következő képkockát meg kell jelenítenünk. Ehhez érvénytelenítjük a Form területét, ami azt vonja maga után, hogy meghívásra kerül a Form Paint eseménye.
    private void OnNextFrame(object o, EventArgs e) 
    {
      Invalidate();
    }
Létrehozunk a Form Paint eseményéhez egy eseménykezelőt, melyben elvégezzük a következő képkocka kirajzolását a Form-ra. Itt az UpdateFrames függvénnyel előkészítjük a következő képkockát a kirajzoláshoz és a DrawImage függvénnyel meg is jelenítjük azt.
    private void Form1_Paint(object sender, System.Windows.Forms.PaintEventArgs e)
    {
      try
      {
        ImageAnimator.UpdateFrames();
        e.Graphics.DrawImage(gif, new Point(this.ClientSize.Width-130, 10));    
      }
      catch
      {
      }
    }