作为一个游戏client程序猿,须要对图像处理有一定的知识。

CxImage是C++实现的功能强大的、能处理多种文件格式的图像管理类。它可以简单高速的实现图像的导入、保存、显示和变换。

同一时候又具有平台无关,免费开源,支持多种图片格式几何操作、图像处理、图像格式转换等长处。所以就从CxImage入手吧。

本文參考自http://www.cnblogs.com/kex1n/archive/2010/01/16/1649059.html,这篇文章讲的挺具体了,我在此基础上自己动手,然后通过图片,为了让跟我一样的刚開始学习的人更加高速入门。

一、下载源代码

去CxImage官网http://www.codeproject.com/Articles/1300/CxImage下载源代码。我下载时候的版本号是cximage600_full。解压源代码包:

各project对用的功能:

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文件夹复制到project文件夹下。

在对话框上画一个button,用于将bitmap格式图片转为jpg和png格式。双击button,响应事件函数。

在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、执行,点击button:

选择bitmap格式图片,生成jpg和png格式图片:

4、总结

CxImage提供了对图像操作的API,仅仅要了解API的作用就能够用CxImage进行图像操作开发了。

最新文章

  1. 盒子 offsetLeft、offsetTop、offsetWidth、getBoundingClientRect等属性解释
  2. mac与windows通过ftp传输文件
  3. HQL查询语句
  4. vs2012中编译时出现程序集所使用的版本高于所引用的版本
  5. RobotFrameWork接口报文测试-----(三)demo的加强版(数据驱动测试)
  6. javaweb-dbcp
  7. UIView中常见的方法总结
  8. OK335xS can't reset with reboot
  9. vim中的一些高级命令的使用
  10. 【转载】【树状数组区间第K大/小】
  11. webApi项目中的问题
  12. GCD 单例
  13. CSS3之动画Animation特效
  14. Docker教程:dokcer machine的概念和安装
  15. phpquerylist 抓取数据详解
  16. 解决Echarts封装成组件时只有最后一个才会缩放的问题
  17. [Golang] 编译程序时打上git提交信息标记
  18. JavaBasic_12
  19. 在springboot中用redis实现消息队列
  20. Windows Server上iSCSI的Best Practices

热门文章

  1. Bits
  2. HTTP调试工具:Fiddler介绍
  3. RSTP介绍
  4. 修改linux 的bash 为zsh
  5. LeetCode OJ-- Palindrome Partitioning II ***
  6. JAVA基础之集合、Iterator迭代器、泛型及增强for循环
  7. c# winform 最小化到托盘
  8. dedecms安装完成后登录后台出现空白
  9. ASP.NET Web API是如何根据请求选择Action的?[下篇] 【转】
  10. C#控件之ListView