画像から生のJPEG MCUブロックを読み取り/書き込む方法は? [.NET PREFFERED] [サードパーティIAMGEライブラリを使用するかもしれません

StackOverflow https://stackoverflow.com/questions/3702939

質問

JPEGの生の画像データを読みたいので、そうすることで品質を失うことなく操作できます。
libjpeg.netライブラリを見てみました http://bitmiracle.com/libjpeg .
しかし、多くのコードがあり、生のブロックの読み取り/書き込みについて何も見つけることができませんでした。
主に、JPEGイメージのロスレス編集を実装したいのですが、どうすればよいですか?
http://en.wikipedia.org/wiki/jpeg#lossless_editing
ありがとう

アップデート:

基本的に私がやりたいのは、データを読むことができるように、JPEGブロックデータに何らかの配列としてアクセスすることです。
そして、新しいJPEGを作成し、他の画像からの行で埋めることができるある種のブロックデータアレイにアクセスしたいと思います。
タスクは簡単に思えますが、問題はlibjpeg.netのドキュメントがそれほど明確ではないことです。
私は今このコード状態に到達しました。

var cinfo = new BitMiracle.LibJpeg.Classic.jpeg_decompress_struct();
cinfo.jpeg_stdio_src(new System.IO.FileStream(@"C:\File.jpg", System.IO.FileMode.Open));
cinfo.jpeg_read_header(true);
cinfo.jpeg_start_decompress();

しかし、それだけです、私はそのMCUブロックの配列をどこで見つけるか、または私が正しい構造を読んでいるかどうかわからない

役に立ちましたか?

解決

たぶんbitmiracle.libjpeg.classic.jpeg_decompress_struct.jpeg_read_raw_data()は、必要なことをします。

また、jpegcodecの実装を確認することもできます libtiff.net. 。そのコーデックは、さまざまな目的でlibjpeg.netを使用しています。圧縮されていないJPEGデータの読み取りはその中にあります。

免責事項:私は図書館のメンテナーの一人です。

他のヒント

JPeglibがそのための公開機能を持っているかどうかはわかりません。 JTRANSFORM_EXECUTE_TRANSFORMATIONでの損失のない変換をサポートしますが、Rotate90/280/2780、フリップ、作物、および転置しかありません。

その関数のソースを読んで、ブロックをどのように取得するかを調べる必要があります。簡単に見えると、それが使用されています

srcinfo->mem->access_virt_barray

これはPTRから機能のPTRです srcinfo aです j_decompress_ptr. 。それはaを取得します JBLOCKARRAY それから。

読んでみます do_flip_v これは理解するのが簡単な変容です。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top