0

我想读取 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 块阵列,或者我是否正在阅读正确的结构

4

2 回答 2

1

我不确定 jpeglib 是否有公共功能。它们支持 jtransform_execute_transformation 中的无损转换,但只有 rotate90/280/2780、flip、crop 和 transpose。

您必须阅读该函数的源代码才能了解它是如何获取块的。快速浏览显示它使用

srcinfo->mem->access_virt_barray

哪个是 ptr-to-function,哪个srcinfoj_decompress_ptr. 它从中得到一个JBLOCKARRAY

我会尝试阅读do_flip_v哪个应该是一个容易理解的转换。

于 2010-09-13T21:07:37.033 回答
1

也许 BitMiracle.LibJpeg.Classic.jpeg_decompress_struct.jpeg_read_raw_data() 会做你需要的。

您可能还想查看 LibTiff.Net 中的 JpegCodec实现。该编解码器将 LibJpeg.Net 用于各种目的。其中包括读取未压缩的 jpeg 数据。

免责声明:我是图书馆的维护者之一。

于 2010-09-14T14:00:55.407 回答