2016-07-25 5 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'で' using'文がこの問題を解決するかもしれません。 –

答えて

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

私の答えを更新しました。私はあなたのビットマップを使用した後に処分するusingステートメントを含んでいました。 –

+0

GDI +とは別に、OutOfMemoryExceptionとして表示される既知の問題があります。実際にはそうではありません。例:https://social.msdn.microsoft.com/Forums/vstudio/en-US/2b813a2e-321b -46ae-9446-47d5b5a82eea/outofmemory-イメージ属性を使用したdrawimage-out-of-imageattributesフォーラム= netfxbcl&prof =必須 – dlatikay