2015-10-11 5 views
5

Все коды, которые я нашел, дают мне тот же результат: кучу точных перспективных фреймов. Значение: он дает мне список первого кадра, повторяемого X раз. В .gif, котор я использую имеет 30 кадров, поэтому я получаю 30 времен первого кадра, вместо 30 различных кадров.Как разбить .gif в фреймах?

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(); 
    } 

Что мне не хватает? ВСЕ коды, которые я просматривал, дают первый кадр, повторяемый X раз.

Это то, что должно выглядеть (с использованием веб-страницы). Посмотрите, как каждый кадр отличается?

enter image description here

Это то, что это выглядит для меня после сохранения каждого кадра внутри этого массива на папке (а куча одинаковых кадров):

enter image description here

PS: Да, это .gif изображение, которое я использую.

Обновление: Проблема заключается в том, что я читаю файл в OpenFileDialog, поскольку он работает, если я передаю свой .gif по коду. Итак, как мне читать анимированный gif в OpenFileDialong? Спасибо.

+0

Это может быть полезно: http://stackoverflow.com/questions/951786/wpf-how-to-extract-frames-from-multiframe-images-tif-gif?rq = 1 – aisa

+0

@aisa Спасибо, но теперь выяснилось, что если я передам свой .gif по коду, он будет работать. Так что проблема в OpenFileDialog, так как он читает мой анимированный .gif как простой .gif. – soulblazer

+0

Вы пытались использовать ['GifBitmapEncoder'] (https://msdn.microsoft.com/en-us/library/system.windows.media.imaging.gifbitmapencoder%28v=vs.90%29.aspx) из WPF? – dbc

ответ

6
IMGs.Add(IMG); 

Это ошибка, вы добавляете один и тот же объект IMG снова и снова. Вам нужно сделать глубокую копию фрейма. Это очень легко сделать:

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

И все эти копии нужно будет удалить позже. – dbc

+0

Так вот в чем проблема. Спасибо. – soulblazer

+0

Ницца. Теперь мне просто не интересно, почему на самом деле каркас .Net притворяется, что это небезопасный 32-битный RGBA вместо 8-битного палитры. – Nyerguds

Смежные вопросы