7

PixelFormat.Format24bppRgb エンコーディングで巨大な画像 (約 24000 x 22000) を作成する必要があります。私はそれを開くことがほとんど不可能であることを知っています...

私がやろうとしているのはこれです:

Bitmap final = new Bitmap(width, height, PixelFormat.Format24bppRgb);

予想通り、メモリ内の 11 GB のファイルを簡単に処理できないため、例外がスローされます。

しかし、私には考えがありました。ファイルを生成しているときにファイルを書き込めますか? そのため、RAM で作業する代わりに、HD で作業することになります。

わかりやすく説明すると、約 13,000 のタイルがあり、このばかばかしいほど巨大なファイルでそれらをつなぎ合わせる予定です。与えられた順序でそれらを繰り返すことができるので、安全でないコードを使用してメモリに直接書き留めることができると思います。

助言がありますか?

4

3 に答える 3

3

ImageMagick の大きな画像のサポート(テラピクセル) は、画像を構成するタイルがあれば、画像をまとめるのに役立ちます。コマンドラインを使用して、このラッパーを使用してコマンドを発行するか、このImageMagick.NETを API として使用できます。

于 2012-05-17T14:29:44.217 に答える
2

BMPのような非圧縮形式で書くことができます。BMPは、生のカラーバイトを行に保存します。したがって、タイルの最初の行をロードし、それらの個別のピクセル行を読み取り、出力画像に複合単一行として書き込みます。このようにして、いくつかのタイルだけを開いて、出力イメージをすぐに書き留めることができます。

しかし、JPGやPNGのような圧縮画像として書く方法がわかりません。しかし、そのための専用ソフトウェアがいくつか存在すると確信しています。

于 2012-05-17T13:43:03.490 に答える
0

この画像を完成させて何をするつもりかによっては、4つに分割して作業することをお勧めします。OOM 例外がスローされることなく、10,000 x 10,000 ピクセルで作業しました。

于 2012-05-17T13:46:18.557 に答える