2015-10-11 12 views
5

Wszystkie znalezione kody dają ten sam wynik: kilka dokładnie wyglądających klatek. Znaczenie: daje mi listę pierwszej klatki, powtarzaną X razy. Używany przeze mnie .gif ma 30 klatek, więc otrzymuję 30 razy pierwszą klatkę zamiast 30 różnych klatek.Jak podzielić .gif w ramkach?

public static Image[] GetFramesFromAnimatedGIF(Image IMG) 
    { 
     List<Image> IMGs = new List<Image>(); 
     int Length = IMG.GetFrameCount(FrameDimension.Time); 

     for (int i = 0; i < Length; i++) 
     { 
      IMG.SelectActiveFrame(FrameDimension.Time, i); 
      IMGs.Add(IMG); 
     } 

     return IMGs.ToArray(); 
    } 

Czego mi brakuje? WSZYSTKIE kody, które oglądałem, dają pierwszą klatkę powtarzaną X razy.

To właśnie powinno wyglądać (za pomocą strony internetowej). Zobacz, jak każda klatka jest inna?

enter image description here

To co wygląda dla mnie po zapisaniu każdej ramki wewnątrz tej tablicy na lokalizacji folderu (pęczek równych klatek):

enter image description here

PS: Tak, to jest .gif obraz, którego używam.

Aktualizacja: Problem wydaje się być, gdy czytam plik w OpenFileDialog, ponieważ działa, jeśli przekazuję mój .gif przez kod. Więc jak mogę przeczytać animowany gif w OpenFileDialong? Dziękuję Ci.

+0

Może to być pomocne: http://stackoverflow.com/questions/951786/wpf-how-to-extract-frames-from-multiframe-images-tif-gif?rq = 1 – aisa

+0

@aisa Dziękuję, ale teraz okazało się, że jeśli przekażę mój .gif przez kod to działa. Tak więc problem występuje w OpenFileDialog, ponieważ czyta mój animowany .gif jako prosty .gif. – soulblazer

+0

Czy próbowałeś użyć ['GifBitmapEncoder'] (https://msdn.microsoft.com/en-us/library/system.windows.media.imaging.gifbitmapencoder%28v=vs.90%29.aspx) z WPF? – dbc

Odpowiedz

6
IMGs.Add(IMG); 

To błąd, dodajesz ten sam obiekt IMG w kółko. Musisz wykonać głęboką kopię ramki. To bardzo proste do zrobienia:

IMGs.Add(new Bitmap(IMG)); 
+0

Wszystkie te kopie będą musiały zostać później usunięte. – dbc

+0

Więc na tym polegał problem. Dziękuję Ci. – soulblazer

+0

Nice. Teraz po prostu zastanawiam się, dlaczego na świecie struktura .Net udaje, że są bez palety 32-bitową RGBA zamiast 8-bitowej palety. – Nyerguds