1

1600 * 900の画像のリストをモザイクとして連結しようとしていますが、(たとえば)100kあたり100kのビットマップを割り当てることができません。

そのため、ビットマップファイルを作成し、ストリームのような方法で書き込む方法を探しています。

どのようにできるのか?ありがとうございました。

4

1 に答える 1

0

100k x 100k の画像の実際の正確な値はまだわかっていませんが、解決策は次のようになります。

  1. 結果の W 行 H 列のモザイクでソース イメージのオフセットのリストを作成します。ここでの計算: 100k x 100k の画像は、約 50 x 100 の画像を保持できます (5k のみ、妥当な数です)。したがって、オフセット配列に必要な要素は 5000 個までで、大きくはありません。この回答 (http://stackoverflow.com/questions/8762569/how-is-2d-bin-packing-achieved-programmatically/10339522) を使用して、これらのオフセットを計算します。

  2. イメージ ヘッダーをファイル ストリームに書き込みます (たとえば、.BMP 形式の 54 バイトのヘッダーを参照してください)。

  3. 「非効率的な」部分: (100k-by-100k)*BytesPerPixel ゼロをファイルに書き込み、イメージをこのファイルに 1 つずつ書き込むことを繰り返します。

InsertImageToStream() は行ごとに行われますが、かなり簡単だと思います。

ステップ 3 の最適化: offsets[] 配列が Y でソートされ、次に X でソートされると、過剰な FileStream.seek() 呼び出しなしで、結果のイメージの各スキャンラインを最適に埋めることができます。

于 2012-05-26T14:59:41.960 に答える