现在,很多图像处理工具和开源库都给出了图像解码的函数接口,然而有时这些接口并不能完全满足我们的需求,比如如果我们想直接去解码内存中的JPEG数据就没有这样的接口。
由于之前做的项目刚刚好设备传过来的图像数据就是JPEG格式的,如果将每帧图像数据都保存成文件然后再借助开源库提供的接口去读入文件会显得很掉价,所以做了一些直接解码内存中JPEG数据的研究。经过对比发现libjpeg库对JPEG图像的编解码支持甚好,而且相对于OpenCV库,复杂度小很多,是故就决定动手来实现我自己想要的接口。
所谓“巧妇难为无米之炊”,要用libjpeg库,第一步自然是去下载其源码,下载地址在这里。
下载完解解压后,就要去编译libjpeg库了,这里我主要参考的是这篇文章和这篇文章。因为第一篇用的是VS2012,有些路径跟本文设置略有差别,所以如果你用的是VS2012,请毫不犹豫的点开链接,跟着他的步骤做吧。当然还是要说,VS2013实在是好用太多。
OK,现在开始做编译的准备工作,其实也就两步:
第一步:找到刚刚解压出来的“jpeg-9a”文件夹下面的“makefile.vc”文件,用记事本或Notepad++等编辑工具打开,然后找到里面的“!include
<win32.mak>”,将“win32.mak”改为绝对路径。不难看出这个win32.mak是个文件,其是VS下的一个文件,所以路径就跟你自己装的VS版本有关,本人装的是VS2013版本,默认情况下该版本中这个文件在“C:\Program
Files (x86)\Microsoft SDKs\Windows\v7.1A\Include”这个目录下。因而我们将刚刚搜索到的那句话改为“!include <C:\Program
Files (x86)\Microsoft SDKs\Windows\v7.1A\Include\win32.mak>”就OK了。
第二步:打开VS2013的命令行:“VS2013
x86 本机工具命令提示”,这个用开始菜单打开会方便点,直接找到“Visual Studio 2013”这一项,打开里面的“Visual Studio Tools”文件夹就可以看到。如果是Win8的用户则建议去装个开始菜单工具,不然就去VS的安装目录下面找。打开命令行之后CD到解压出来的“jpeg-9a”目录下,输入“nmake
/f makefile.vc setup-v10”,回车,待命令行执行完命令后,准备工作就大功告成啦。关于命令行的操作,具体如下图:
下面来做编译,其实已经没什么难点了,上面工作做完之后,“jpeg-9a”文件夹下面会生成一个VS的工程。直接运行里面的“jpeg.sln”,然后VS提示要升级编译器什么的点是,进入编程界面后直接编译就大功告成了。编译完成后在“jpeg-9a”文件夹下的“Release”文件夹中可以看到一个“jpeg.lib”文件,这个就是我们刚刚编译出来的静态链接库。
要使用这个静态链接库,只要先包含进jconfig.h,jmorecfg.h,jpeglib.h这三个头文件,然后把刚刚编译出来的jpeg.lib加进工程中就可以了。习惯上会把jpeg.lib改名为libjpeg.lib。下面提供一个jpeg转bmp的例子,代码是基本照搬这篇文章的,只是做了少量修改。
解码内存中JPEG数据的实现方法后面会再写一篇文章详细描述,一旦完成则放上链接。
解码内存中JPEG数据的实现方法文章地址