画像から生のJPEG MCUブロックを読み取り/書き込む方法は? [.NET PREFFERED] [サードパーティIAMGEライブラリを使用するかもしれません
-
02-10-2019 - |
質問
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
これは理解するのが簡単な変容です。