CxImage是一款免费的、开源的、功能强大的图形处理库。跨平台,支持windows、linux等;支持BMP、GIF、ICO、TGA、JPEG、PCX、PNG、TIFF、MNG、RAS等多种图像格式;支持格式转换、图像处理、几何变换等;最重要的是使用非常简单。
CxImage类库是一个优秀的图像操作类库。它可以快捷地存取、显示、转换各种图像。有的读者可能说,有那么多优秀的图形库,如OpenIL,FreeImage,PaintLib等等,它们可谓是功能强大,齐全,没必要用其它的类库。但我要说,这些类库基本上没有免费的,使用这些类库,你要被这样那样的许可协议所束缚。在这点上,CxImage类库是完全免费的。另外,在使用上述类库时,你会遇到重重麻烦。因为它们大部分是平台无关的,且用C语言写成,有的还夹杂着基本的C++ wrapper和成堆的编译选项的声明需要你去处理。而CxImage类库在这方面做得很好。还有让我最看好的,就是作者完全公开了源代码。相对于那些封装好的图形库和GDI+来说,这一点使我们可以进一步学习各种编解码技术,而不再浮于各种技术的表面。
CxImage优点:
1)使用十分简单。文档详细,只有一个API接口文件,函数清晰易懂,以少量接口满足大部分人的需求。
2)平台无关,支持windows、linux、unix,支持32位和64位。
3) 支持多种格式:BMP、GIF、ICO、TGA、JPEG、PCX、PNG、TIFF、MNG、RAS等等
4) 功能强大:几何变换、图像处理、图像格式转换等。
5)自由软件、免费的、开源的
CxImage是一个动态库,可以从http://www.xdp.it/cximage.htm下载CxImage的最新版本进行编译。
CxImage代码如上所示,包括三个部分:
1)libs中是8个基础库,zlib,jpeg,png,raw,tiff等。由C实现,可以单独使用;
2)so可以编译出cximage的动态库 , 它其实是对libs中8个基础库的进一步集成和封装,使其用起来更加简单。 由C++实现。
3) demo 就是一些例子了。
1)windows下VC6,VS2003,2005,2008编译
CxImage默人包含一个VC6的编译工程,如果你有VC6,VC6,VS2003,2005,2008, 直接打开CxImgLib.dsw, build就可以啦。
注意在Build CxImage动态库和Demo的时候,需要引用libs的基础库,如果在编译时报link错,就可能是这些库未设置,或路径不对。手工修改一下就可以啦。
2) win7下VS2010编译cximage demo
把这个单独拿来说,是因为我在编译demo时遇到了问题:
其实是个很简单的windows版本问题,只需要在Deom 中的StdAfx.h中的代码
#ifndef WINVER #define WINVER 0x0400 #endif
// Modify the following defines if you have to target a platform prior to the ones specified below. // Refer to MSDN for the latest info on corresponding values for different platforms. #ifndef WINVER // Allow use of features specific to Windows 95 and Windows NT 4 or later. #define WINVER 0x0501 // Change this to the appropriate value to target Windows 98 and Windows 2000 or later. #endif #ifndef _WIN32_WINNT // Allow use of features specific to Windows NT 4 or later. #define _WIN32_WINNT 0x0501 // Change this to the appropriate value to target Windows 98 and Windows 2000 or later. #endif #ifndef _WIN32_WINDOWS // Allow use of features specific to Windows 98 or later. #define _WIN32_WINDOWS 0x0501 // Change this to the appropriate value to target Windows Me or later. #endif #ifdef _WIN32_IE // Allow use of features specific to IE 4.0 or later. #undef _WIN32_IE #endif #define _WIN32_IE 0x0500 // Change this to the appropriate value to target IE 5.0 or later.
就可以了。重点是_WIN32_IE,需要先undef然后define新的。
3)linux下编译
这个其实没啥说的,从网上找一个Makefile的模板,然后将libs 、so、demo的工程分别转为Makefile,编译就可以了。
需要注意的是 so 可能会引用libs中编译出的lib,所以需要先编译libs下面的工程。
CxImage使用非常简单。可能刚开始接触有点迷糊,如果我告诉你直接打开源码目录下的index.html,然后在右侧选CxImage-〉CxImage Class List-〉CxImage,浏览CxImage类的说明就可以满足你所有需求了。你会不会觉得很简单呢?
Cximage类中有263个接口,这里就不再一一列出了。最常用的可能有以下几个:
1)格式转换
CxImage image("c:\\temp\\11.jpg"); image.Save("c:\\temp\\22.png",CXIMAGE_FORMAT_PNG);CxImage支持19种图像格式
CXIMAGE_FORMAT_BMP CXIMAGE_FORMAT_GIF CXIMAGE_FORMAT_JPG CXIMAGE_FORMAT_PNG CXIMAGE_FORMAT_MNG CXIMAGE_FORMAT_ICO CXIMAGE_FORMAT_TIF CXIMAGE_FORMAT_TGA CXIMAGE_FORMAT_PCX CXIMAGE_FORMAT_WBMP CXIMAGE_FORMAT_WMF CXIMAGE_FORMAT_JBG CXIMAGE_FORMAT_JP2 CXIMAGE_FORMAT_JPC CXIMAGE_FORMAT_PGX CXIMAGE_FORMAT_PNM CXIMAGE_FORMAT_RAS CXIMAGE_FORMAT_SKA CXIMAGE_FORMAT_RAW
2)获取图像信息
CxImage image("1.jpg"); image.GetSize(); // 获取图像大小 image.getHeight(); // 获取图像高度(像素) image.getWidth(); // 获取图像宽度(像素) image.getNumColors(); // 获取图像颜色数 image.getBpp(); //获取图像位数 8位/16位/24位/32位 image.getType(); //获取图像类型
帅!
3) 图像处理
图像裁剪
CxImage image("1.jpg"); image.Crop(letp,top,right,bottom);
图像旋转
image.Rotate(angle); image.RotateLeft(); image.RotateRight();
image.AlphaCreate(); image.SetTransColor(color); image.Save("2.png",CXIMAGE_FORMAT_PNG);
在内存中创建
CxImage(width,height,bpp,type); CxImage(buffer,size,type); image.CreateFromHANDLE(hMem); image.CreateFromHBITMAP(hbmp):
在内存中编码保存
image.Encode(buffer,size,type); image.Decode(buffer,size,type);