2011-11-25 9 views
6

現在、C#オープンソースの写真モザイクソフトウェア(Sourceforge Link)を作成中です。このソフトウェアは、大量の小さな写真(タイル)を1つの大きな画像につなぎ合わせます。c#:JPGを部品に保存する

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

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

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

jpgsが圧縮されているため、チャンク内にデータを書き込むのが非常に難しいようです(通常のBitmap.Save()関数は、完全なイメージを最初にメモリにロードするため、適用できません)。圧縮されていないRGBデータはそれを行いません。

jpgの圧縮アルゴリズムがチャンクまたは8x8 pxで動作することを知っている限り、当事者にjpgを書き込む基本的な機能が必要です。

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

ありがとうございました! 最大

答えて

1

OpenJPEG libraryは言及していないので、私はあなたがそれを見逃している可能性があると考えました。もちろん

http://www.openjpeg.org/

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

編集:これは非常に不完全なようですが、C#コードなので参考になります。 http://www.codeproject.com/KB/graphics/SimpleJpeg.aspx

+0

ありがとう、私は本当にそれを逃した。できるだけ早くそれをチェックします! – mgulde

+0

ええと、OpenJPEGは基本的にはJPEGとJPEG2Kの変換と戻しのみを対象としています。単純なエンコーダは素晴らしいソリューションですが、複雑に見えますが); – mgulde

+0

うーん、_jpg openjpegライブラリは増分I/Oをサポートしていますか?私はそれをちょっと見ていましたが(ドキュメントは非常に小さいですが)、すべてのイメージI/Oインターフェイスは完全なイメージでしか動作していないようでした...インクルードI/Oを行うために使用するAPI呼び出しを指摘できますか? openjpegライブラリ...?ありがとう! – snogglethorpe

関連する問題