2016-07-25 40 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