c#:JPGを部品に保存する

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

最終的な画像サイズは通常、20kpx×15kpxのオーダーであるため、タイルをどのようにメモリに配置するかのマップを保存するだけです。最終的なイメージを構築するために、私は部分的に、つまり8行のバンド(それ以外の番号でも可能です)で構築しています。

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

しかし結果として得られるbmpsは、あまりにも大きいので(例えば、ポスター印刷会社に与えるなど)、それ以上の処理はできません。私は従って私のhddのjpgsとしてこれらの大きいイメージを救いたいと思う。

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

私が知っている限り、jpgの圧縮アルゴリズムはチャンクまたは8x8 pxで動作するので、パーティーでjpgを書くという基本的な機能は存在するはずです。

この問題の解決策を見つけるためにいくつかのイメージライブラリ(FreeImage、GraphicsMagick、LibTiff.NET)を調べましたが、何も見つかりませんでした。 LibTiffは基本的には望みの機能を持っていますが、TIFF画像フォーマットの場合のみです。

あなたの助けをありがとう! 最大

6

1 答え

OpenJPEG library について言及していないので、あなたがそれを見逃している可能性があると思いました。

http://www.openjpeg.org/

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

Edit: This looks very incomplete but may be helpful since it's C# code. http://www.codeproject.com/KB/graphics/SimpleJpeg.aspx

1
追加された
ありがとう、私は本当にそれを逃した。できるだけ早くそれをチェックします!
追加された 著者 mgulde,
うーん、OpenJPEGは基本的にはJPEGとJPEG2Kの変換とバックのみを対象としています。シンプルなエンコーダは素晴らしいソリューションですが、複雑に見えますが)
追加された 著者 mgulde,
うーん、 openjpegライブラリは増分I/Oをサポートしていますか?私はそれをちょっと見ていましたが(ドキュメントは非常に小さいですが)、すべてのイメージI/Oインターフェイスは完全なイメージでしか動作していないようでした...インクルードI/Oを行うために使用するAPI呼び出しを指摘できますか? openjpegライブラリ...?ありがとう!
追加された 著者 snogglethorpe,