最好用图像处理库CxImage入门

news/2024/7/7 16:11:57 标签: python

2019独角兽企业重金招聘Python工程师标准>>> hot3.png

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代码如上所示,包括三个部分:

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





转载于:https://my.oschina.net/u/2326085/blog/391310


http://www.niftyadmin.cn/n/1129062.html

相关文章

我们使用RAID技术的原因:

RAID 我们使用RAID技术的原因:(a)传输速率高 在RAID中,由于多个磁盘驱动器可以同时并行传输数据,而这些磁盘驱动器在逻辑上又呈现为一个磁盘驱动器,以便于操作系统管理。所以使用RAID可以达到几倍、几十倍,甚至上百…

关于C++类型检查的一点小挫折

问题:定义了一个float型数组Lut[],我让一个整型指针指向数组名int * Addresslut ;VS2008报错:error C2440: : cannot convert from float [256] to int * 疑问:貌似在我C语言中,不止一次听过…

在Vue项目中使用mockjs生成模拟数据

在项目中安装mockjs 在项目目录下执行以下安装命令 npm install mockjs --save在Vue项目中使用mockjs的基本流程 安装完成后,在项目src/utils目录下新建mock.js(可自行定义所在目录及文件名),用于生成模拟数据。 // 引入mockj…

如何做硬盘raid

如何做硬盘raid<wbr></wbr><wbr></wbr><wbr></wbr>在RAID家族里&#xff0c;RAID 0和RAID 1在个人电脑上应用最广泛&#xff0c;毕竟愿意使用4块甚至更多的硬盘来构筑RAID 01或其他硬盘阵列的个人用户少之又少&#xff0c;因此我们在这里仅…

源码中编译.so文件

2019独角兽企业重金招聘Python工程师标准>>> 越来越强烈的感觉到学到的知识最好要通过笔记的形式记录下来&#xff0c;要不然时间久了就会忘掉&#xff0c;再用到的时候还要重新学习&#xff0c;实为浪费。之前自己学到的一些知识没有立刻将记录下来&#xff0c;现在…

Ios8 Xcode6 设置Launch Image 启动图片

http://blog.sina.com.cn/s/blog_6c97abf10102voui.html Http://Www.woowen.com/Swift/2014/12/12/Ios8设置Launch Image 启动图片/ 如何设置App的启动图,也就是Launch Image? Step1 1.点击Image.xcassets 进入图片管理,然后右击,弹出"New Launch Image"2.如图,右侧…

【iCore3应用开发平台】发布 iCore3 应用开发平台出厂代码rev0.0.6

iCore3应用开发平台固件版本信息 【stm32f407】&#xff1a;iCore3 ARM程序固件版本&#xff1a;rev0.0.6build014编译日期&#xff1a;2017/03/17版本说明&#xff1a;1、对示波器界面进行了优化&#xff0c;增大示波器子菜单按键的尺寸&#xff0c;防止边缘触摸无效无法触摸按…

电脑的工作原理

电脑的工作原理跟电视、VCD机差不多&#xff0c;您给它发一些指令&#xff0c;它就会按您的意思执行某项功能。不过&#xff0c;您可知道&#xff0c;这些指令并不是直接发给您要控制的硬件&#xff0c;而是先通过前面提过的输入设备&#xff0c;如键盘、鼠标&#xff0c;接收您…