Willkommen auf myCSharp.de! Anmelden | kostenlos registrieren
 | Suche | FAQ

Hauptmenü
myCSharp.de
» Startseite
» Forum
» Suche
» Regeln
» Wie poste ich richtig?

Mitglieder
» Liste / Suche
» Wer ist online?

Ressourcen
» FAQ
» Artikel
» C#-Snippets
» Jobbörse
» Microsoft Docs

Team
» Kontakt
» Cookies
» Spenden
» Datenschutz
» Impressum

  • »
  • Community
  • |
  • Diskussionsforum
Animiertes GIF nur einmal abspielen lassen ?!
RiDDem
myCSharp.de - Member



Dabei seit:
Beiträge: 7

Themenstarter:

Animiertes GIF nur einmal abspielen lassen ?!

beantworten | zitieren | melden

Hallo,

ich möchte ein animiertes GIF einmalig abspielen lassen, sodass das Endbild der Animation stehen bleibt.

Das Problem:

Das GIF-Bild wird bei abspielen im Internet Explorer und beim normalen öffnen in Windows auch nur einmalig abgespielt; sobald ich es jedoch in einer pictureBox lade und das Projekt kompiliere fängt die Animation immer wieder von vorne an ?!

Hat jemand eine Idee zur Lösung des Problems?

Vielen Dank im Voraus,
Riddem
private Nachricht | Beiträge des Benutzers
DerHulk
myCSharp.de - Member

Avatar #avatar-1789.png


Dabei seit:
Beiträge: 273
Herkunft: Koblenz

beantworten | zitieren | melden

Hallo RiDDem,

habe zwar keine direkte Lösung für dich aber ich bin heute zufällig über dieses Programm gestossen:
http://stevedunns.googlepages.com/convertanimatedgifstospritemaps

Hier liegt der Quellcode ja vor und das Programm muss die Bilder ja auch nur einmal verarbeiten/abspielen daher könnte dir das evtl. helfen.

mfg Hulk
private Nachricht | Beiträge des Benutzers
MartinK
myCSharp.de - Member



Dabei seit:
Beiträge: 5

beantworten | zitieren | melden

Evt. kannst du das Problem auch umgehen, wenn du die komplette Ablaufzeit der Gif-Animation erfasst und vom letzten Bild der Animation ein Einzelbild erstellst (über ein prof. Zeichenprogramm, oder Desktop-Screenshot).

In der Programmierung lässt du die Gif-Animation in der Picture-Box über die Zeit, welche eine vollständige Abfolge benötigt, laufen (Timer). Im Abschluss ersetzt du das Ani-Gif durch das jetzte Einzelbild.

Gruß
Martin
private Nachricht | Beiträge des Benutzers
TigerCrow
myCSharp.de - Member



Dabei seit:
Beiträge: 86

beantworten | zitieren | melden

Es ist schon etwas her :(

Habe für Dein Problem dies im Netz gefunden:



using System;
using System.Drawing;
using System.Drawing.Imaging;
using System.Collections.Generic;
using System.IO;

public class AnimatedGif {
  private List<AnimatedGifFrame> mImages = new List<AnimatedGifFrame>();
  PropertyItem mTimes;
  public AnimatedGif(string path) {
    Image img = Image.FromFile(path);
    int frames = img.GetFrameCount(FrameDimension.Time);
    if (frames ≤ 1) throw new ArgumentException("Image not animated");
    byte[] times = img.GetPropertyItem(0x5100).Value;
    int frame = 0;
    for (; ; ) {
      int dur = BitConverter.ToInt32(times, 4 * frame);
      mImages.Add(new AnimatedGifFrame(new Bitmap(img), dur));
      if (++frame ≥ frames) break;
      img.SelectActiveFrame(FrameDimension.Time, frame);
    }
    img.Dispose();
  }
  public List<AnimatedGifFrame> Images { get { return mImages; } }
}

public class AnimatedGifFrame {
  private int mDuration;
  private Image mImage;
  internal AnimatedGifFrame(Image img, int duration) {
    mImage = img; mDuration = duration;
  }
  public Image Image { get { return mImage; } }
  public int Duration { get { return mDuration; } }
}


Vielleicht ist das auch was für andere die sowas suchen

Lieben Gruß
TigerCrow
private Nachricht | Beiträge des Benutzers