wie man einen rohen JPEG MCU Block aus einem Bild lesen / schreiben? [.Net bevorzugt] [vielleicht eine 3rd-Party-Bild-Bibliothek]
-
02-10-2019 - |
Frage
Ich mag die rohen Bilddaten eines JPEG zu lesen, so dass ich es ohne Verlust irgendeine Qualität manipulieren kann, wenn dies zu tun.
Ich nahm einen Blick auf die LibJpeg.Net Bibliothek http://bitmiracle.com/libjpeg .
aber es gibt eine Menge Code und könnte nicht finden, etwas über das Lesen / Schreiben von Rohblöcken.
in erster Linie möchte ich lossless Bearbeitung eines JPEG-Bildes implementieren und frage mich, wie es zu tun?
http://en.wikipedia.org/wiki/Jpeg#Lossless_editing
Dank
Update:
im Grunde, was ich tun möchte, ist die JPEG-Blockdaten als eine Art Array zuzugreifen, so dass ich die Daten lesen kann.
und dann will ich eine neue JPEG und Zugang irgendeine Art von Blockdaten-Array erstellen, dass ich mit den Zeilen von anderen Bildern füllen.
die Aufgaben scheinen einfach, aber das Problem ist, dass die Dokumentation von libJpeg.net ist nicht so klar.
Ich habe jetzt diesen Zustand des Code erreicht.
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();
Aber das ist es, ich weiß nicht, wo das Array von MCU Blöcken finden oder, wenn ich auch die richtige Struktur lese
Lösung
Vielleicht BitMiracle.LibJpeg.Classic.jpeg_decompress_struct.jpeg_read_raw_data () wird tun, was Sie brauchen.
Sie können auch JpegCodec Implementierung überprüfen in LibTiff.Net möchten. Dass Codec verwendet LibJpeg.Net für verschiedene Zwecke. Lesen unkomprimierte JPEG-Daten ist unter ihnen.
Disclaimer: Ich bin einer der Maintainer der Bibliothek
.Andere Tipps
Ich bin nicht sicher, dass jpeglib öffentliche Funktionen für das hat. Sie unterstützen lossless Transformationen im jtransform_execute_transformation, aber nur haben rotate90 / 280/2780, Flip, Ernte und transponieren.
Sie müssen die Quelle dieser Funktion lesen, um herauszufinden, wie es um die Blöcke bekommt. Ein kurzer Blick zeigt es mit
srcinfo->mem->access_virt_barray
, die eine ptr-to-Funktion ist, wo srcinfo
ein j_decompress_ptr
ist. Es wird eine JBLOCKARRAY
aus, dass.
Ich würde versuchen, do_flip_v
zu lesen, die eine einfache Transformation sein sollten, zu verstehen.