2011-05-27 4 views
1

J'ai fonction qui crée un fichier GIF animé, il a toujours fonctionné parfaitement, mais maintenant, quand tous mes gifs sont en noir et blanc, il donne une exception OutOfMemory sur:Out Of Memory Exception

e.AddFrame (Image. FromFile (imageFilePaths [i]));

Ma fonction:

public void MakeGif(string sourcefolder, string destinationgif) 
    { 
     IsGifing = true; 
     string path = MainForm.RootDirectory; 
     String[] imageFilePaths = Directory.GetFiles(path); 
     String outputFilePath = MainForm.RootDirectory + @"\Final.gif"; 
     AnimatedGifEncoder e = new AnimatedGifEncoder(); 
     e.Start(outputFilePath); 
     e.SetDelay(300); 
     //-1:no repeat,0:always repeat 

     e.SetRepeat(0); 
     for (int i = 0, count = imageFilePaths.Length; i < count; i++) 
      e.AddFrame(Image.FromFile(imageFilePaths[i])); 
     e.Finish(); 
     IsGifing = false; 
    } 

ADDFRAME Fonction:

public bool AddFrame(Image im) 
    { 
     if ((im == null) || !started) 
     { 
      return false; 
     } 
     bool ok = true; 
     try 
     { 
      if (!sizeSet) 
      { 
       // use first frame's size 
       SetSize(im.Width, im.Height); 
      } 
      image = im; 
      GetImagePixels(); // convert to correct format if necessary 
      AnalyzePixels(); // build color table & map pixels 
      if (firstFrame) 
      { 
       WriteLSD(); // logical screen descriptior 
       WritePalette(); // global color table 
       if (repeat >= 0) 
       { 
        // use NS app extension to indicate reps 
        WriteNetscapeExt(); 
       } 
      } 
      WriteGraphicCtrlExt(); // write graphic control extension 
      WriteImageDesc(); // image descriptor 
      if (!firstFrame) 
      { 
       WritePalette(); // local color table 
      } 
      WritePixels(); // encode and write pixel data 
      firstFrame = false; 
     } 
     catch (IOException e) 
     { 
      ok = false; 
     } 

     return ok; 
    } 
+0

Merci pour la réponse. NOTE: Ce n'est pas parce que les gifs noir et blanc, je regardais le mauvais dossier et essayé d'ajouter un fichier .txt> _> –

Répondre

3

La documentation pour Image.FromFile dit qu'il lancera OutOfMemoryException si le fichier ne contient pas une image valide, ou si l'image est dans un format que GDI + ne supporte pas.

Qu'est-ce qui se passe si vous réécrivez votre code:

for (int i = 0, count = imageFilePaths.Length; i < count; i++) 
{ 
    var img = Image.FromFile(imageFilePaths[i]); 
    e.AddFrame(img); 
} 

Si vous obtenez l'exception de l'appel à Image.FromFile, il est parce que votre image ne peut pas être chargée.

+0

Oui, OOM comme erreur générale. Amusement. –

+0

Merci, je vais trouver un autre moyen de le charger. Dis, comment le savais-tu? vous venez de vérifier toutes mes fonctions pour les exceptions de MOO ou connaissez-vous ce problème? –

+0

@Or Betzalel: Je n'ai pas eu à vérifier toutes vos fonctions. Vous avez dit qu'il est mort dans cette ligne, donc il n'y avait que deux possibilités pour commencer. Une règle de base du débogage est de décomposer les choses en étapes les plus simples possibles, donc la première chose que j'ai regardée était de savoir si 'Image.FromFile' pouvait lancer' OutOfMemoryException'. –

0

Je ne connais pas les détails, mais cela ne regarde pas en écriture. Il n'y a pas d '«utilisations», donc vous ne disposez peut-être pas de ressources.

Questions connexes