CxImage类库的使用

CxImage是一个非常牛B的开源库,支持各种图片格式的解码和编码,还有一些图像处理功能等等。接触这个库是因为一开始想自己实现一个这样的类似的处理图像的库,然后做一个简易的漫画阅读器类的软件。然而发现框架太难构造,工作量太大,于是想先找一个现成库来实现功能,待慢慢功能框架构造好了,就可以慢慢的用自己写的代码去替换掉CxImage。但是用的时候却碰到了好多问题。

首先CxImage可以在这里下载,我就下了最新的cximage701_full这个版本。

下载完后,cximage701_full文件夹下有一个VC6.0的dsw文件,用VC打开这个文件。这个工程的所有项目都是默认的编译Unicode版本的,所以如果你直接点全部组建,可能会产生一个什么“mfcs42u.lib not found”之类的错误,这是因为你安装VC的时候默认的安装都没有装Unicode的版本。解决方法就是把VC安装盘里的VC98->MFC->LIB里的所有文件都拷贝到VC的安装目录的VC98->MFC->LIB目录,如果有重复就不要覆盖。

或者你也可以更改组建的版本,这个工程提供了4个组建方式:Debug,Release,Unicode Debug和Unicode Release。一种简易的方法可以更改组建方式:点工具->定制,然后打开工具栏选项卡,把组建那个框勾上,就会有一个组建的工具栏。在这个工具栏里可以选择这4种组建方式,分别选择你想要的方式组建即可。还有一种更快的方法,点组建->批组建,然后弹出一对话框,勾选要组建的方式,然后点击全部组建就ok。

全部组建好后,在cximage_full文件夹下会生成一个bin目录,里面有生成的dll文件。如cximage.dll是使用mfc的Release版本,cximagecrt.dll是不使用mfc的Release版本,加了d代表Debug版本,u代表Unicode Release版本,du代表Unicode Debug版本。这些dll文件在使用时需要一个.lib的导入库,这个导入库在cximage_full/CxImage/CxImageDll下,这个目录下有4个文件夹对应4个版本,如Debug版本中有cximaged.lib,即代表cximaged.dll的导入库。

为了组织好,可以新建一个文件夹如mycximage,在这个文件夹下建3个目录:dll,include,lib,其中dll文件夹下放使用动态链接库时的文件,还可以在这些目录下再建2个目录mfc和crt,代表是否使用mfc的版本。这两个目录下再建4个目录,Debug,Release等,代表4种版本,如把上面的cximaged.lib和cximage.dll拷贝到dll/mfc/Debug下。

同样lib目录代表静态库的版本,编译CxImage库时能分别得到dll版本和lib版本,这里用lib目录存放lib版本的文件,同样可以再建4个目录,代表4种版本。在cximage_full文件夹下的CxImage目录下同样也有Debug等文件夹,这些文件夹下生成的是各种版本的lib,把对应目录的cximage.lib文件拷贝到lib目录的对应目录下。再类似把cximage_full文件夹下的jasper,jbig,jpeg,libpsd,mng,png,raw,tiff,zlib文件夹下的对应lib拷贝到lib目录的对应文件夹下。

最后,把cximage_full/CxImage文件夹下的stdint.h,xfile.h,ximacfg.h,ximadef.h,ximage.h,xiofile.h,xmemfile.h这7个文件拷贝到include文件夹下。这样所有的需要用的都准备好了。这里是我组织的方式:

接下来就是使用CxImage了。VC6.0下新建一mfc项目,点工程->设置,点C/C++选项卡,在分类框中选择预处理器,然后在下面的“附加包含路径”中填上...\mycximage\include,这样在程序中就可以直接用#include语句导入这些头文件,只要导入ximage.h就行了

如果要使用动态库,需要把dll和导入库lib文件拷贝到工程文件夹下,然后在程序中加#pragma comment(lib,"xx.lib"),对应不同的版本用不同的dll和lib。也可以不用这句话,在工程->设置,点连接选项卡,分类中选择输入,然后附加库路径中天上...\mycximage\dll\debug(这里是以debug版的为例),然后上面的对象/库模块填上cximaged.lib,这样就行了。

如果要使用静态库,也和上述方法差不多,一是使用#pragma语句,这需要把所有的那些lib静态库都拷贝到工程文件夹下。另一个是设置工程的选项,就像上面的,填写附加库路径和对象/库模块,不过这里要把所有的lib文件填写到对象/库模块中,每一个之间用空格分割。

这样就可以在代码中使用CxImage类库了。



One thought on “CxImage类库的使用

发表评论

电子邮件地址不会被公开。 必填项已用*标注

*