现在的位置: 首页 > 综合 > 正文

使用CxImage库的初体验

2018年03月17日 ⁄ 综合 ⁄ 共 2762字 ⁄ 字号 评论关闭

    众所周知CxImage库是个功能非常强大的图片处理库,它支大部分常用的图片格式,使用它最主要的理由是它能很好的支持带有Alpha通道的PNG格式图片。之前也尝试过使用微软的ATL::CImage类,这个类也支持大部分的图片格式包括PNG格式的,相比CxImage库而言它,它只是一个轻量级的ATL组件类在Windows平台下只要支持GDI+都可以很方便的使用这个库。

 

       失败的是CImage虽然也支持带Alpha通道的PNG格式图片,但它显示一个带Alpha的PNG图片透明部分会用白色填充而不能很好的跟背景溶合在一起,这是我主要放弃它的原因。我们在做2D游戏时候图像显示的质量是非常关键的,如果拥有一个非常强大的图像处理库来做底层支持的话将会事半功倍。

 

 

       好了,我来说明一下这个CxImage类的简单用法,希望给刚接触CxImage的朋友带来一些帮助,首先我要说明的是在这里我以CxImage 6.0.0.0版为例(各个版本可有能所不同)。官方下载地址是:http://www.xdp.it/cximage/

 

每个类都都有一个头文件,如果你的代码中需要CxImage的派生类,那么就需要加上该派生类相应的头文件。如你的代码中需要处理JPG格式的图片,那么需要CxImageJBG类,所以需要#include "ximajpg.h"

 

打开工程后可以看到下例这些工程:

- CxImage(生成静态库cximage.lib,只不过改静态库调用了png.lib、Jpeg.lib、jbig.lib、Tiff.lib、libdcr.lib、jasper.lib、zlib.lib、mng.lib中的函数,所以用一起使用)

- CxImageCrtDll(生成win32 DLL的动态链接库,有四个版本,有导入库cximage.lib和动态链接库cximagecrt××.dll,在使用时,只要cximage.lib和cximage.dll就ok了,不需要静态库png.lib、Jpeg.lib、jbig.lib、Tiff.lib、libdcr.lib、jasper.lib、zlib.lib、mng.lib。因为这些静态库都已经被打包到cximage.dll里了

- CxImageMfcDll(生成win32 MFC的DLL的动态链接库,有四个版本,有导入库cximage.lib和动态链接库cximage××.dll,在使用时,只要cximage.lib和cximage.dll就ok了,不需要静态库png.lib、Jpeg.lib、jbig.lib、Tiff.lib、libdcr.lib、jasper.lib、zlib.lib、mng.lib。因为这些静态库都已经被打包到cximage.dll里了

- dome(生成四种版本的可执行文件程序dome××.exe,这个exe程序是通过调用静态库cximage.lib、png.lib、Jpeg.lib、jbig.lib、Tiff.lib、libdcr.lib、jasper.lib、zlib.lib、mng.lib完成的

- domeDll(生成四种版本的可执行文件程序domeDLL××.exe,这个exe程序是通过调用win32 DLL动态链接库cximagecrt××.dll完成的

- jasper(生成静态库jasper.lib)

- jbig(生成静态库jbig.lib)

- jpeg(生成静态库Jpeg.lib)

- libdcr(生成静态库libdcr.lib)

- mng(生成静态库mng.lib)

- png(生成静态库png.lib)

- tiff(生成静态库Tiff.lib)

- zlib(生成静态库zlib.lib,这不是一种文件格式,而是一种压缩引擎)

 

1。首先我们要确定在程序中是希望静态链接还是动态链接,在这里我建议大家使用动态链接,因为这个库有点大,如果使用静态链接的话你的应用程序体积会额外增加1MB多。

 

2。然后确定在MFC中使用还是在CRT环境中使用,这个库专门为你建了这两个工程来创建不同环境中使用的运行时库,跟据你的需求来选择编译CxImageCrtDll还是CxImageMfcDll工程,如果你希望使用静态库链接的话除了这两个工程不需要编译其它的工程都需要编译。并且在引用这个静态库的时候要把这些所有编译过的工程里的*.lib全部拷到你的程里去。

 

3。OK编译完工程后将以下文件拷到你建立的工程里去

先将头文件拷到你的工程里去:

xfile.h、ximacfg.h、ximadef.h、ximage.h、xiofile.h、xmemfile.h

 

使用静态链接需要拷以下文件:

cximage.lib(这个库会用到其他库如png.lib,jpeg.lib......的函数,所以要想使用cximage.lib静态库,必须加上png.lib、Jpeg.lib、jbig.lib、Tiff.lib、libdcr.lib、jasper.lib、zlib.lib、mng.lib库,否则在链接cximage.lib中的某个函数时,就找不到。)、png.lib、Jpeg.lib、jbig.lib、Tiff.lib、libdcr.lib、jasper.lib、zlib.lib、mng.lib

 

如用动态链接需要拷以下文件:

cximage.lib(这个是DLL中的导入库,而不是静态库cximage.lib)、cximage.dll

 

4。在你的工程里引用这个库#include "ximage.h"、#pragma comment(lib, "cximage.lib")(这是对动态链接库cximage.dll而言的),如果是静态链接拷过来的那些*.lib文件全部要引用进去否则无法链接,在这里有人可能会问既然只包含了"ximage.h"这一个头文件为什么要拷那么多头文件过来呢?这是因为"ximage.h"这个头文件依赖那几个头文件所以必须拷过来。

 

5。现在你就可以使用这个CxImage库了,那我们来加载一幅图片然后将它显示出来吧:

      CxImage  image; // 定义一个CxImage对象

 

      image.Load("Ooopsy.png", CXIMAGE_FORMAT_PNG); // 加载一幅png图片

 

      // 在OnPaint消息里显示出来

      image.Draw(dc.GetSafeHdc(), 0, 0);

 

     以上只介绍最简单的用法,至于基它的功能你就自已尝试,我就不多说了,要是我一下子说完了CxImage开发者就不需要写文档说明了,在它的跟目录下有一个index.htm这就是它的文档起始页,如果你需要的话就自已去看吧!

抱歉!评论已关闭.