私はいくつかの大学のプロジェクトに取り組んでおり、メモリの問題で立ち往生しています。以下のコードを使用して、HDD に約 1.5 GB のビットマップをロードします。
Bitmap bmp = new Bitmap(pathToFile);
問題は、新しく作成された Bitmap オブジェクトが約 3.5 GB の RAM を使用することです。これは私には理解できません (これは本当に BIG ラッパーです:E)。ピクセル配列に到達する必要があり、Bitmap クラスの使用は非常に役立ちます (後で LockBits() メソッドを使用し、バイトごとに配列を処理します) が、この場合は完全なブロッカーです。だからここに私の質問があります:
追加の 2GB を貸与せずにピクセル配列を抽出する簡単な方法はありますか?
必要な配列を抽出するためだけに c# を使用していますが、これは後で c++ で処理されます。必要なすべてのデータを c++ で抽出できるかもしれません (ただし、ここで変換の問題が発生します - 私は 24bgr 形式に集中しています)。
PS: ビットマップ全体をメモリに保持する必要があるため、ビットマップを部分に分割することは解決策ではありません。
PS2: いくつかの問題を明確にするために: ファイル拡張子とファイル形式の違いを知っています。ロードされたファイルは圧縮されていないビットマップで、サイズはピクセルあたり 3 バイトで、サイズは 1.42 GB (16k x 32k ピクセル) ですが、Bitmap オブジェクトが 2 倍以上大きいのはなぜですか? 解凍の問題や他の形式への変換は行われていません。