2011-07-11 27 views
8

オンザフライで画像を編集(高さを増やす)する必要があります。 ファイルのサイズは、主に5000 * 4000です。私は大きなレベルのbmpを作成し、bmpインスタンスでGraphics.DrawImageメソッドを呼び出すと、メモリがピークレベルになることがわかります。大きなビットマップを使用するとメモリ不足例外が発生する

メモリ不足の例外を取り除くにはどうすればよいですか? C#で大きなビットマップを扱う方法はありますか?

+1

コードを入力できますか? – VMAtm

+1

そのメモリの問題を確認してくださいこれをチェックしてくださいhttp://stackoverflow.com/questions/5801652/bitmap-while-assigning-height-width-crashes/5802113#5802113 – V4Vendetta

+1

私は同じ問題を抱えていると思います。 .dll用の1 GB以上のメモリ。可能な答えは、ストリームを使用してファイルをチャンクで処理することです。 –

答えて

0

にですが、あなたのアプリケーション固有のrequeirementsに依存し、それはyuorポストから非常に明確ではないですが、generaly、大きなメディアファイル(画像、音声、動画)と協力し、私は本当に良い解決策が

Memory Mapped Files

だと思いますメモリマップされたファイル内のディスクにyuorイメージを保存し、おそらく高速アクセスを必要としない多くのデータから、できるだけ多くの無料のyuor RAMによってディスク上にあるサイズを変更します(その瞬間には少なくとも)

これは役立ちます。よろしくです。 よろしくお願いします。

+0

これは簡単ではありません。 –

+0

これは以前よりずっと簡単でしたが、.NETクラスをラップしたように私を信じてください。 (.NET Framework 4.0のみ) – Tigran

+1

OOMはRAMを使い果たしたために発生しません。ビットマップはすでにMMFを使用しています。作成するだけで、仮想メモリを使い果たしやすくなります。 –

4

問題は、操作に必要な膨大な量のメモリです。あなたはギガバイト程度のギガバイトを取っているので、ソリューションはストリームを使用してファイルをチャンクで処理することができます。

または、最善の選択肢は、サードパーティライブラリを使用することです。以下はネット

AForge

Image Resizer

のためのいくつかはまた、このSOの質問を見ています。

https://stackoverflow.com/questions/158756/what-is-the-best-image-manipulation-library

関連する問題