我想解码 JPEG 文件并获得 BMP/RGB 格式的未压缩解码输出。我使用的是 GNU/Linux 和 C/C++。
我查看了 libjpeg,但似乎没有任何好的文档可用。所以我的问题是:
- 关于 libjpeg 的文档在哪里?
- 你能推荐其他基于 C 的 jpeg 解压缩库吗?
libjpeg 的文档随源代码一起提供。由于您还没有找到它:
下载源代码存档并打开文件libjpeg.doc。这是一个纯 ASCII 文件,而不是 word 文档,所以最好在记事本或其他 ASCII 编辑器中打开它。
还有一些其他的 .doc 文件。不过,它们中的大多数并不那么有趣。
不幸的是,我不能推荐除 libjpeg 之外的任何其他库。我尝试了几个替代方案,但 Libjpeg 总是获胜。一旦你完成了基础知识,就很容易使用。它也是目前最完整和最稳定的 jpeg 库。
您应该查看 Qt 的 QImage。它有一个非常简单的界面,使这项任务非常容易。每个平台的设置都非常简单。
如果 Qt 太过分了,你可以试试 Magick++ http://www.imagemagick.org/Magick++/。它支持类似的操作,也非常适合此类任务。上次使用它时,我在 Windows 上对它的依赖关系有些挣扎,但在 Linux 上不记得有太多麻烦。
对于 Magick++ 的 Image 类,您可能想要的函数是 getConstPixels。
我有您可以复制(或仅用作参考)的代码,用于使用 libjpeg 库加载 jpeg 图像。
您可以在此处浏览代码:http
://code.google.com/p/kgui/source/browse/trunk/kguiimage.cpp
只需查找函数LoadJPGImage。
该代码设置为处理我的DataHandle类与其的 c++ 绑定以加载图像,这样图像就可以是已经在内存中的文件或数据或其他任何东西。
一个稍微开箱即用的解决方案是获取netpbm工具的副本,该工具通过几种非常简单的中间格式之一将图像从几乎任何格式转换为任何其他格式。它们在 shell 中运行良好,并且最常用于管道中以读取任意图像,对其执行操作,并将其写入其他格式。
pbm 格式可以是简单的 ASCII 标头,后跟 ASCII 或二进制的 RGB 数据。它们旨在足够简单易用,无需库来实现。
netpbm 通过在 libjpeg 之上实现的读写过滤器支持 JPEG。