2015-10-11 29 views
5

Tutti i codici che ho trovato mi danno lo stesso risultato: un mucchio di fotogrammi dall'aspetto esatto. Significato: mi dà una lista del primo fotogramma, ripetuto X numero di volte. Il .gif che sto usando ha 30 fotogrammi, quindi ottengo 30 volte il primo fotogramma, invece dei 30 fotogrammi diversi.Come dividere un file .gif in frame?

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

Cosa mi manca? TUTTI i codici che ho guardato danno il primo fotogramma ripetuto X volte.

Questo è ciò che dovrebbe apparire (utilizzando una pagina Web). Vedi come ogni fotogramma è diverso?

enter image description here

Questo è ciò che sembra per me dopo aver salvato ogni fotogramma all'interno di quella matrice su una cartella (un gruppo di strutture uguali):

enter image description here

PS: Sì, è un .gif l'immagine che sto usando.

Aggiornamento: Il problema sembra essere quando ho letto il file in OpenFileDialog, come funziona se passo il mio .gif per codice. Quindi, come faccio a leggere una gif animata in OpenFileDialong? Grazie.

+0

Questo può essere utile: http://stackoverflow.com/questions/951786/wpf-how-to-extract-frames-from-multiframe-images-tif-gif?rq = 1 – aisa

+0

@aisa Grazie, ma ora si è scoperto che se passo il mio .gif per codice funziona. Quindi il problema è in OpenFileDialog, poiché sta leggendo il mio .gif animato come un semplice .gif. – soulblazer

+0

Hai provato a utilizzare ['GifBitmapEncoder'] (https://msdn.microsoft.com/en-us/library/system.windows.media.imaging.gifbitmapencoder%28v=vs.90%29.aspx) da WPF? – dbc

risposta

6
IMGs.Add(IMG); 

Questo è il bug, si aggiunge lo stesso oggetto IMG più e più volte. Devi fare una copia profonda della cornice. Questo è molto facile da fare:

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

E tutte quelle copie dovranno essere smaltite successivamente. – dbc

+0

Quindi questo è stato il problema. Grazie. – soulblazer

+0

Bello. Ora mi viene da chiedersi perché mai il framework .Net fa finta di essere RGBA a 32 bit senza tavolo invece di palettizzazione a 8 bit. – Nyerguds

Problemi correlati