作为一个游戏客户端程序员,需要对图像处理有一定的知识。
CxImage是C++实现的功能强大的、能处理多种文件格式的图像管理类。它能够简单快速的实现图像的导入、保存、显示和变换。同时又具有平台无关,免费开源,支持多种图片格式几何操作、图像处理、图像格式转换等优点。所以就从CxImage入手吧。
本文参考自http://www.cnblogs.com/kex1n/archive/2010/01/16/1649059.html,这篇文章讲的挺详细了,我在此基础上自己动手,然后通过图片,为了让跟我一样的初学者更加快速入门。
一、下载源码
去CxImage官网http://www.codeproject.com/Articles/1300/CxImage下载源码,我下载时候的版本是cximage600_full。解压源码包:
各工程对用的功能:
CxImage:cximage.lib – 静态库
CxImageCrtDll:cximagecrt.dll – 动态库
CxImageMfcDll:cximage.dll – 用于mfc的动态库
Demo:demo.exe – 链接cximage.lib和C库的程序
Demo2:demodll.exe – 链接cximagecrt.dll的程序
jasper、jbig、jpeg、mng、png、raw、tiff、zlib:静态C库
二、编译CxImage
1、解压源码后,在解压目录下有一个CxImgLib.dsw工作空间文件,使用VC++6.0打开该工作空间文件。
2、Project -> Setting –> C/C++,在Category下拉列表中选择CodeGeneration,将Use run-time library中选择Multithreaded DLL。在Category下拉列表中选择Precompiled Headers,选择第一项:Not using Precompiled headers。
3、Build -> Batch Build -> 勾选你要编译的版本库。默认情况下是每个库都有四个版本,分别是Debug、Release、Unicode Debug、Unicode Release。选择你要编译的版本即可。
三、使用CxImage
1、编译好了,新建一个文件夹,如mycximage。在该文件夹下新建一个header文件夹和一个lib文件夹。将CxImage下的所有头文件都拷贝到header文件夹下,将刚才所有生成的lib文件拷贝到lib文件夹下。至此,你已经拥有了CxImage类库。
2、用VC++6.0新建一个基于对话框的MFC应用程序CxImageTest1,将刚才新建好的mycximage文件夹拷贝到工程目录下。在对话框上画一个按钮,用于将bitmap格式图片转为jpg和png格式。双击按钮,响应事件函数。
在CxImageTest1Dlg.cpp顶部加入代码:
// image头文件
#include "mycximage/header/ximage.h"
// 加载图片格式处理静态库
#pragma comment(lib, "mycximage/lib/cximage.lib")
#pragma comment(lib, "mycximage/lib/cximagecrtd.lib")
#pragma comment(lib, "mycximage/lib/jasper.lib")
#pragma comment(lib, "mycximage/lib/jbig.lib")
#pragma comment(lib, "mycximage/lib/Jpeg.lib")
#pragma comment(lib, "mycximage/lib/mng.lib")
#pragma comment(lib, "mycximage/lib/png.lib")
#pragma comment(lib, "mycximage/lib/Tiff.lib")
#pragma comment(lib, "mycximage/lib/zlib.lib")
在事件响应函数中添加以下代码:
CxImage image;
CString strFileName; // 图像文件名
CFileDialog dlg( TRUE, "BMP", NULL, OFN_OVERWRITEPROMPT | OFN_HIDEREADONLY, "所有图像文件(*.*)|*.*|BMP图像文件(*.BMP)|*.BMP|JPG格式图像(*.JPG)|*.JPG||");
dlg.DoModal();
// 获取文件名
strFileName = dlg.GetFileName();
// 判断文件名是否为空
if (strFileName.GetLength() == 0)
{
return;
}
// 加载BMP位图
image.Load( strFileName.GetBuffer( strFileName.GetLength()), CXIMAGE_FORMAT_BMP );
// 判断图像是否有效
if (image.IsValid())
{
// 判断图像颜色数
if (!image.IsGrayScale())
image.IncreaseBpp( 24 );
// 设置Jpeg图像的质量
image.SetJpegQuality( 80 );
// 将位图转换成JPEG格式图像
image.Save("export.jpg",CXIMAGE_FORMAT_JPG);
image.Save("export.png",CXIMAGE_FORMAT_PNG);
}
3、运行,点击按钮:
选择bitmap格式图片,生成jpg和png格式图片:
4、总结
CxImage提供了对图像操作的API,只要了解API的作用就可以用CxImage进行图像操作开发了。