1,先到官网下载CxImage,地址:http://www.xdp.it/download.htm 我这里下载的是cximage600_full.
2,解压,发现里面只有个vc6的工程,没关系,打开Codeblocks,转换工程,成功以后,删除不要的工程CxImageCrtDll和CxImagemfcdll还有demo和demoDll,因为我们是用MinGw编译,这两工程是提供vc6和mfc的dll.
3,开始编译, 先编译图像库和支持库jasper,jbig,jpeg,libdcr,mng,Tiff,zlib得到对应的lib***.a,新建一个libs文件,把.a拷贝进去
编译之前先配置cximage,打开 ximacfg.h
#define CXIMAGE_SUPPORT_RAW 0
把自己不需要的功能修改为0,需要的为1.
然后开始编译cximage,编译前注意Debug版本就都要用Debug的库,Realese版本就都用Realese库,首先报错
D:\cximage600_full_cp\CxImage\ximadsp.cpp|3507|error: 'max' was not declared in this scope|
D:\cximage600_full_cp\CxImage\ximadsp.cpp|3507|error: 'min' was not declared in this scope|
查看了max,min其实有定义的,但是找不到奇怪,在ximadsp.cpp上加上using namespace std; 用std里面的先代替吧,
继续编译,又提示
D:\cximage600_full_cp\CxImage\ximaexif.cpp|752|error: 'isprint' was not declared in this scope|
没找到isprint,在linux下man一下,发现在ctype里,加上#include <ctype.h> ,继续,仍然报错
D:\cximage600_full_cp\CxImage\ximawnd.cpp|1222|error: '_tcsclen' was not declared in this scope|
把_tcsclen替换为_tcslen函数,再编译,终于成功了
ar.exe: creating D:\cximage600_full_cp\CxImage\Debug\libcximage.a
为了测试是否真的成功了,自己写个测试程序测试
2 #include "../ximage.h"
3
4 using namespace std;
5
6 int main()
7 {
8 CxImage img;
9 img.Load("./old.jpg",CXIMAGE_FORMAT_JPG);
10 if(img.IsValid())
11 {
12 img.Save("./new.png",CXIMAGE_FORMAT_PNG);
13 }
14
15 return 0;
16 }
设置好工程的链接目录和链接库,先在Search directories的Linker里设置libs的路径,我这里为http://www.cnblogs.com/libs,然后在Linker Settings的Other linker options:中加入
-lTiff
-lpng
-lJpeg
-lzlib
编译报错
g了一下是gdi32里的函数,在链接库里面再加上-lgdi32,再编译成功,经测试,测试程序已经可以实行图像格式转换了
最后是打包发布,让其他程序可以调用他
把libs目录拷出来,还有以下头文件
xfile.h ximacfg.h ximadef.h ximage.h xiofile.h xmemfile.h
调用的时候只要include ximage.h就可以了
提供一个我编译好的库cximage_mingw
最后吐槽一下,个人觉得cximage并不是很好用,代码的移植性并不算太好,不像是个跨平台项目. 继续寻找其他的开源图像库