2016-07-25 39 views
0

我的圖像轉換程序出現問題。我可以轉換39圖像,然後出現此錯誤:轉換映像內存不足錯誤

Exception thrown: 'System.OutOfMemoryException' in System.Drawing.dll

我不明白什麼是我的代碼問題。

錯誤:

string[] originalImage = Directory.GetFiles(textBox1.Text); 
       foreach (var filename in originalImage) 
       { 

        if (fileExtension.ToUpper() == ".JPG" || fileExtension.ToUpper() == ".PNG") 
        { 
         Bitmap bitmap = new Bitmap(filename); //error coming here 
         //DefaultCompressionJpeg(bitmap); 
         string fn = Path.GetFileNameWithoutExtension(filename); 

         VariousQuality(bitmap, fn, fileExtension, fileOriginalDate); 

        } 
       } 
+1

爲什麼如果你在第一個循環中突破它,甚至使用'for'循環? –

+1

'OutOfMemoryException'可能來自'FileStream',它可能無法在每個轉換過程中正確處理,因此現有實例在創建新實例並耗盡內存空間時仍可在內存中使用。在'FileStream'上使用''語句可以解決這個問題。 –

回答

3

你應該處置每次當您使用對象來完成它實現IDisposable對象。以下是您程序中的一些可丟棄對象;

Filestream ms, 
Bitmap original, 
EncoderParameter encoderParameter 

如果沒有足夠的內存繼續執行程序,則會引發OutOfMemoryException。處理上述對象應解決您的問題。

更新: 請嘗試以下代碼;

 if (fileExtension.ToUpper() == ".JPG" || fileExtension.ToUpper() == ".PNG") 
     { 
      using (Bitmap bitmap = new Bitmap(filename)) // added using statement. 
      { 
       //DefaultCompressionJpeg(bitmap); 
       string fn = Path.GetFileNameWithoutExtension(filename); 

       //saadame lisaks ka extensioni, et saaksime lihtsamini faili ümber nimetada 
       VariousQuality(bitmap, fn, fileExtension, fileOriginalDate); 
      } 

     } 
+0

編輯我的帖子,錯誤到來。 –

+0

更新了我的答案。我包含一個使用語句,它將在使用後處理您的位圖。 –

+0

除此之外,還有一些已知的GDI +問題,當它們實際上不存在時,將顯示爲OutOfMemoryException,例如:https://social.msdn.microsoft.com/Forums/vstudio/en-US/2b813a2e-321b -46ae-9446-47d5b5a82eea/outofmemoryexception-in-drawimage-with-image屬性?forum = netfxbcl&prof =必需 – dlatikay