C# で大きな画像 (20,000x20,000 ピクセル) を処理する必要があります。これらの画像を直接開くことは、メモリの制限があるため行う方法ではありませんが、私がやりたいのは、画像を小さな断片に分割することです (トリミング)。トリックができるサードパーティのライブラリを探していましたが、これまでのところ結果はありません。FreeImage と ImageMagick を試しましたが、20,000x20x000 ピクセルの画像を開くことができません。どうすればこれを達成できますか?
5 に答える
私の現在のプロジェクトは、16 GB を超える画像をロードできる画像ビューア/分析プログラムで構成されています。手動のファイル IO を使用し、ヘッダー情報を引き出して、サブイメージをオンデマンドで作成する必要があります (または、イメージを処理している場合は、単一のタイルを作成してその場で処理できます)。20k x 20k のイメージ (24bpp で 1.2gb) をロード/変更する機能を提供するライブラリはほとんどありません。
これが役立つかどうかはわかりませんが、C# ラムダ式を使用した画像処理に関する記事を次に示します。
私はImageMagickでそれをします。かなり堅実な.NETAPIが利用可能であり、これは通常、このような画像処理を行うための最良の方法です。
ページの途中にある.NETの下を見てください。
http://www.imagemagick.org/script/api.php
コマンドラインバージョンで、ImageMagickの切り抜きがどのように機能するかについての情報は次のとおりです。
これを行う既存のライブラリは知りません。
おそらく、画像ファイル ストリームをクラックして開き、色とピクセル データが存在する場所を探し、ピクセル データのセクションを配列に読み取り、そこから画像を作成する必要があります。
たとえば、BMP ファイル形式の場合、カラー テーブルをシークし、カラー テーブルをロードしてから、ピクセル配列セクションをシークし、必要な数のピクセルを配列にロードしてから、新しいビットマップを作成します。それらのピクセル。