6

私は現在、ac#オープンソースの写真モザイクソフトウェア(Sourceforge Link)に取り組んでいます。このソフトウェアは、大量の小さな写真(タイル)を1つの大きな画像につなぎ合わせます。

最終的な画像サイズは通常20kピクセル×15kピクセルのオーダーであるため、タイルをメモリに配置する方法のマップのみを保存しています。最終的な画像を作成するために、私はそれを部分的に、つまり8行のバンドで作成しています(他の数でも可能です)。

bmpの場合、最初にbmpヘッダーを書き込み、次にARGBデータをこのファイルに追加することで、このデータをチャンクごとに簡単に保存できます。

しかし、結果として得られるbmpは、それ以上処理するには大きすぎます(たとえば、ポスター印刷会社に渡すなど)。したがって、これらの大きな画像をjpgとしてhddに保存したいと思います。

問題は、jpgが圧縮されているため、データをチャンクで書き込むのは非常に難しいように見えることです(通常のBitmap.Save()関数は最初に画像全体をメモリにロードするため、適用できません)。純粋な非圧縮のRGBデータを書き込むためです。それをしません。

私の知る限り、jpgの圧縮アルゴリズムはチャンクまたは8x8ピクセルで機能するため、パーティでjpgを書き込む基本的な機能が存在する必要があります。

この問題の解決策を見つけるために、いくつかの画像ライブラリ(FreeImage、GraphicsMagick、LibTiff.NET)を調べましたが、見つかりませんでした。LibTiffには基本的に必要な機能がありますが、tiff画像形式の場合のみです。

あなたの助けをどうもありがとう!マックス

4

1 に答える 1

1

あなたが言及しなかったのでOpenJPEG library、私はあなたがそれを見逃したかもしれないと思った.

http://www.openjpeg.org/

もちろん、その周りにいくつかのラッパーが必要になりますが、そのライブラリを使用してやりたいことを達成できると思います。しかし、これが最も簡単な解決策ではないことはわかっています。他の誰かがより良い、より簡単な提案を思いついた場合は、このライブラリをスキップできます。

編集:これは非常に不完全に見えますが、C# コードであるため役立つ場合があります。http://www.codeproject.com/KB/graphics/SimpleJpeg.aspx

于 2011-11-25T10:05:24.973 に答える