2015-10-11 40 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文件。那麼如何在OpenFileDialong中讀取動畫gif?謝謝。

+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