转自 http://www.cnblogs.com/CCBB/archive/2010/12/08/1900315.html
CxImage库的基本信息就不介绍了,网上很多资源,下载页面
http://www.codeproject.com/KB/graphics/cximage.aspx
开发环境VS2008 SP1
首先新建一个解决方案叫做ImageLab
新建如下几个工程:
MyImageLab:一个MFC应用程序,继承的CScrollView类
CxImage:一个Win32项目,静态库,添加所有的.h和.cpp文件
jpeg:一个Win32项目,静态库,添加所有的.h和.cpp文件
png:一个Win32项目,静态库,添加所有的.h和.cpp文件
zlib:一个Win32项目,静态库,添加所有的.h和.cpp文件
在ximacfg.h中设置如下:
#define CXIMAGE_SUPPORT_BMP 1
#define CXIMAGE_SUPPORT_GIF 1
#define CXIMAGE_SUPPORT_JPG 1
#define CXIMAGE_SUPPORT_PNG 1
其他都为0
因为我只是使用:bmp,gif,jpeg和png格式的图片!
关系:
png要添加附加库路径:..zlib
CxImage要添加附加库路径:..zlib,..jpeg,..png
MyImageLab要添加附加库路径..CxImage
设置CxImage,png,jpeg,zlib的输出目录,在属性->配置属性->常规->输出目录,把输出目录和中间目录都改成:.Debug
生成zlib,png,jpeg,得到所有的.lib库文件
下面就是要让MyImageLab工程添加这些lib文件了。在stdafx.h文件最下面写入:
#include "ximage.h"
#pragma comment(lib,"cximage.lib")
#pragma comment(lib,"jpeg.lib")
#pragma comment(lib,"png.lib")
#pragma comment(lib,"zlib.lib")
在MyImageLab属性->链接器->输入->常规->附加库目录,添加如下目录:..pngDebug,..jpegDebug,..zlibDebug,..CxImageDebug
设置项目生成顺序:zlib,png,jpeg,cximage,MyImageLab
生成解决方案就行了。 MyImageLab设为启动项。
接 下来就是给你的项目添加功能和使用CxImage类了。jpeg,png,zlib,是当前国际标准的库文件,你不要修改。CxImage是就是一个开发 人员写的一个图像处理库,它用了前面的标准C库文件,同时自己把自己的CxImage库开源了。所以,其实如果不要改CxImage的底层算法的话,就不 需要修改CxImage项目的内容,但是也可以给这个库添加功能或者修改功能。但是,现在的主要任务是完善MyImageLab项目的功能。逐步实现如下 功能:
1,读入和保存图像
2,能够有矩形框选择图像区域
3,分析图像的分量值,实现一些简单的变化:如二值化,彩色转灰度图,简单分割等
4,实现一些较高级功能,如色彩空间的转换,去除红眼等!!
新建如下几个工程:
MyImageLab:一个MFC应用程序,继承的CScrollView类
CxImage:一个Win32项目,静态库,添加所有的.h和.cpp文件
jpeg:一个Win32项目,静态库,添加所有的.h和.cpp文件
png:一个Win32项目,静态库,添加所有的.h和.cpp文件
zlib:一个Win32项目,静态库,添加所有的.h和.cpp文件
在ximacfg.h中设置如下:
#define CXIMAGE_SUPPORT_BMP 1
#define CXIMAGE_SUPPORT_GIF 1
#define CXIMAGE_SUPPORT_JPG 1
#define CXIMAGE_SUPPORT_PNG 1
其他都为0
因为我只是使用:bmp,gif,jpeg和png格式的图片!
关系:
png要添加附加库路径:..zlib
CxImage要添加附加库路径:..zlib,..jpeg,..png
MyImageLab要添加附加库路径..CxImage
设置CxImage,png,jpeg,zlib的输出目录,在属性->配置属性->常规->输出目录,把输出目录和中间目录都改成:.Debug
生成zlib,png,jpeg,得到所有的.lib库文件
下面就是要让MyImageLab工程添加这些lib文件了。在stdafx.h文件最下面写入:
#include "ximage.h"
#pragma comment(lib,"cximage.lib")
#pragma comment(lib,"jpeg.lib")
#pragma comment(lib,"png.lib")
#pragma comment(lib,"zlib.lib")
在MyImageLab属性->链接器->输入->常规->附加库目录,添加如下目录:..pngDebug,..jpegDebug,..zlibDebug,..CxImageDebug
设置项目生成顺序:zlib,png,jpeg,cximage,MyImageLab
生成解决方案就行了。 MyImageLab设为启动项。
接 下来就是给你的项目添加功能和使用CxImage类了。jpeg,png,zlib,是当前国际标准的库文件,你不要修改。CxImage是就是一个开发 人员写的一个图像处理库,它用了前面的标准C库文件,同时自己把自己的CxImage库开源了。所以,其实如果不要改CxImage的底层算法的话,就不 需要修改CxImage项目的内容,但是也可以给这个库添加功能或者修改功能。但是,现在的主要任务是完善MyImageLab项目的功能。逐步实现如下 功能:
1,读入和保存图像
2,能够有矩形框选择图像区域
3,分析图像的分量值,实现一些简单的变化:如二值化,彩色转灰度图,简单分割等
4,实现一些较高级功能,如色彩空间的转换,去除红眼等!!
先给个测试程序:
在菜单栏添加一个响应函数:onTest
void CMyImageLabDoc::OnTest()
{
// TODO: 在此添加命令处理程序代码
CxImage image;
image.Load(_T("Anne Hathaway 1.jpg"), CXIMAGE_FORMAT_JPG); //*******坑爹啊 这里不是 CXIMAGE_SUPPORT_JPG,不然会有错误“*****中的 0x7c812aeb 处最可能的异常: Microsoft C++ 异常: 内存位置 0x0010e418 处的 char”
if(image.IsValid())
{
image.GrayScale(); //将图像转成灰度图
image.Save(_T("test.jpg"), CXIMAGE_FORMAT_JPG);
}
}
{
// TODO: 在此添加命令处理程序代码
CxImage image;
image.Load(_T("Anne Hathaway 1.jpg"), CXIMAGE_FORMAT_JPG); //*******坑爹啊 这里不是 CXIMAGE_SUPPORT_JPG,不然会有错误“*****中的 0x7c812aeb 处最可能的异常: Microsoft C++ 异常: 内存位置 0x0010e418 处的 char”
if(image.IsValid())
{
image.GrayScale(); //将图像转成灰度图
image.Save(_T("test.jpg"), CXIMAGE_FORMAT_JPG);
}
}
在项目目录可以看到一个转换成灰度图的安妮·海瑟薇。
错误 1 error C1010: 在查找预编译头时遇到意外的文件结尾。是否忘记了向源中添加“#include "StdAfx.h"”? d:点云mfctestcximagetestcximagetestxmemfile.cpp 203
解决方案:xmemfile.cpp -->属性--》c/c++-->预编译头--》预编译头--》 不使用预编译头
//错误2 :在文件中 修改Load 和SAVE 函数参数类型,将CONST TCHAR * 改成 char *;【不必要了】
生成zlib,png,jpeg,得到所有的.lib库文件 在这一步中,一般我们的项目是使用Unicode 字符集,所以在生成Lib的时候。必须是uicode debug(有 debug/Release/unicode debug/unicode Release)
按照上述步骤:最后生成的文件列表:
然后将这些文件加到项目工程中,就可以直接用了 ;测试项目在我的百度云中CximageTest.rar