最好用图像处理库CxImage入门

CxImage是一款免费的、开源的、功能强大的图形处理库。跨平台,支持windows、linux等;支持BMP、GIF、ICO、TGA、JPEG、PCX、PNG、TIFF、MNG、RAS等多种图像格式;支持格式转换、图像处理、几何变换等;最重要的是使用非常简单。

1.为什么选择CxImage?

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)自由软件、免费的、开源的

2.下载与编译

源码说明

CxImage是一个动态库,可以从http://www.xdp.it/cximage.htm下载CxImage的最新版本进行编译。

最好用图像处理库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时遇到了问题:

error C2065: 'CCM_SETWINDOWTHEME'

其实是个很简单的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下面的工程。


3.使用入门

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();

背景透明处理(需要存为png格式)

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);





你可能感兴趣的:(图像处理,CxImage)