Keep on going, never give up.

CxImage在VC下的配置与使用

之前每次用到图片处理,总要去找些主流开源库,后来才发现CxImage这个开源工程还蛮好用,支持BMP、GIF、ICO、JPG、PNG、TIFF等格式,对普通应用程序开发者而言,都不是专门研究图像编解码,再者图片、视频、音乐这几种文件格式也是最混乱,版本也最繁杂,兼容问题永远解不完......刚看到CxImage工程会感觉很大很繁杂,但其实使用起来,比起用开源视频解码库要少多多了,非常方便。

本文仅演示CxImage在VC++ 6.0用法,更多功能演示可参考官方链接及其demo程序。

一、CxImage介绍

CxImage是个C++图像处理库,可载入、保存、显示和转换图像,支持透明图层、多图层,支持BMP、GIF、JPG、PNG、MNG、TIF、ICO、TGA、PCX、J2K、JBG、RAS、PNM、RAW及PSD等格式图像文件。

Demo工程支持VC++ 及 Visual Studio编译环境。

下载地址:http://sourceforge.net/projects/cximage/

二、CxImage使用

1、下载CxImage zip包

解压到当前工程MyTest的CxImage目录下。CxImage工程链接方式支持静态链接和动态链接方式。本文介绍静态链接方式。如果您想测试自带的Demo程序则直接使用其目录下的demo工程,直接就可编译运行。

2、添加CxImage相关工程

添加CxImage工程到当前工程MyTest下

包括:

  • cximage.dsp —— 生成cximage lib库
  • demo.dsp —— demo工程
  • jasper.dsp —— 图像库
  • Jpeg.dsp —— 图像库
  • mng.dsp —— 图像库
  • png.dsp —— 图像库
  • tiff.dsp —— 图像库
  • zlib.dsp —— 依赖库

cximage目录下的其它图像库,根据需要添加。

3、设置链接参数和格式支持

程序链接在工程Setting——LINK里设置,注意Debug版本和Release版本需对应设置。

  • cximage/Cximage/Debug/cximage.lib
  • cximage/jasper/Debug/jasper.lib
  • cximage/jpeg/Debug/jpeg.lib
  • cximage/png/Debug/png.lib
  • cximage/zlib/Debug/zlib.lib

图像格式支持,可修改头文件:cximage/Cximage/ximacfg.h中的下面一段(1——表示支持,0表示不支持也就是关闭):

  • // CxImage supported formats
  • #define CXIMAGE_SUPPORT_BMP 1
  • #define CXIMAGE_SUPPORT_GIF 1
  • #define CXIMAGE_SUPPORT_JPG 1
  • #define CXIMAGE_SUPPORT_PNG 1
  • #define CXIMAGE_SUPPORT_ICO 0///
  • #define CXIMAGE_SUPPORT_TIF 0///
  • #define CXIMAGE_SUPPORT_TGA 0///
  • #define CXIMAGE_SUPPORT_PCX 0///
  • #define CXIMAGE_SUPPORT_WBMP 1
  • #define CXIMAGE_SUPPORT_WMF 0///
  • #define CXIMAGE_SUPPORT_JP2 1
  • #define CXIMAGE_SUPPORT_JPC 1
  • #define CXIMAGE_SUPPORT_PGX 0///
  • #define CXIMAGE_SUPPORT_PNM 0
  • #define CXIMAGE_SUPPORT_RAS 0
  • #define CXIMAGE_SUPPORT_JBG 0 // GPL'd see ../jbig/copying.txt & ../jbig/patents.htm
  • #define CXIMAGE_SUPPORT_MNG 0
  • #define CXIMAGE_SUPPORT_SKA 0
  • #define CXIMAGE_SUPPORT_RAW 0
  • #define CXIMAGE_SUPPORT_PSD 0

配置方法参考下图(来源于下文官方链接),注意需要几种库,那么ximacfg.h配置、MyTest设置链接库、MyTest工程内子工程三者要对应:

4、编译图像库

CxImage支持Debug、Release、Unicode Debug、Unicode Release版本编译,注意需要跟MyTest自己工程对应。先编CxImage库,再编译MyTest工程。

5、测试CxImage程序

如下程序演示,使用CxImage库并加载一张jpg图片,然后绘制到静态文本控件里的全部过程。摘自自己以前的程序片段:

	#include  "cximage\CxImage\ximage.h"
	CxImage *m_pCSample;
	HBITMAP m_SampleBitMap;

	m_SamplePic.ModifyStyle(SS_BLACKFRAME,SS_BITMAP|SS_CENTERIMAGE); 

	if(m_pCSample != NULL) {
		delete m_pCSample;
		m_pCSample=NULL;
	}
	m_pCSample = new CxImage();
	m_pCSample ->Load("sample.jpg",CXIMAGE_FORMAT_JPG);
	if(m_pCSample ->AlphaIsValid())//Refer to CxImage::Mix
		m_pCSample ->AlphaCreate();

	m_iImageHeight = m_pCSample ->GetHeight();
	m_iImageWidth = m_pCSample ->GetWidth();

	//HDC hDC = ::GetDC(NULL);//ok
	HDC hDC = m_SamplePic.GetDC()->m_hDC;//ok
	//Resample
	CRect lRect;
	m_SamplePic.GetClientRect(&lRect);
	m_pCSample->Resample(lRect.right,lRect.bottom);

	//Display
	if (m_SampleBitMap) {
		DeleteObject(m_SampleBitMap);
		m_SampleBitMap=NULL;
	}

	m_SampleBitMap = m_pCSample->MakeBitmap(hDC);
	m_SamplePic.SetBitmap(m_SampleBitMap);
	

仔细浏览了一下,从上到下基本是完整的,除了m_SamplePic是static空间的控制变量,这个没加进来。

三、CxImage使用提示

使用CxImage工程时,因为封装的太过傻瓜化,所以,经常发现您需要的功能总是不知如何实现,这时可通过如下方法:

1、阅读cximage.h这个文件下函数声明

2、结合demo程序,凡是需要的功能基本全部可以跟踪出来具体的用法

3、下面的官方参考网址示例

更多参考:

http://www.codeproject.com/Articles/1300/CxImage 

相关评论(0):  

发表评论:

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。

订阅博客

最新文章

本站采用创作共用版权协议, 要求署名、非商业用途和保持一致. 转载也必须遵循“署名-非商业用途-保持一致”的创作共用协议. 返回顶部
Copyright@2005-2016 Metsky.com, All rights Reserved.