CxImage入门教程,图文并茂_小葱CC的博客-程序员资料

技术标签: 游戏客户端  图像处理  图像操作  CxImage  CxImage学习  

作为一个游戏客户端程序员,需要对图像处理有一定的知识。


CxImage是C++实现的功能强大的、能处理多种文件格式的图像管理类。它能够简单快速的实现图像的导入、保存、显示和变换。同时又具有平台无关,免费开源,支持多种图片格式几何操作、图像处理、图像格式转换等优点。所以就从CxImage入手吧。


本文参考自http://www.cnblogs.com/kex1n/archive/2010/01/16/1649059.html,这篇文章讲的挺详细了,我在此基础上自己动手,然后通过图片,为了让跟我一样的初学者更加快速入门。


一、下载源码

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

 

各工程对用的功能:

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文件夹拷贝到工程目录下。在对话框上画一个按钮,用于将bitmap格式图片转为jpg和png格式。双击按钮,响应事件函数。

在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、运行,点击按钮:


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





4、总结

CxImage提供了对图像操作的API,只要了解API的作用就可以用CxImage进行图像操作开发了。

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/wxc237786026/article/details/41171079

智能推荐

SAPUI5 (4) - Input组件_sap ui5 input回车_SAP 开发的博客-程序员资料

学习目标:掌握Input一般组件用法学习内容:1、 Feed Input2、 Input List Item3、 Date Time Input4、 Mask Input5、 Multi Input代码如下:OverView.view.xml// An highlighted block <App> <pages> <Page title="OverView"> <VBox> <Panel he

Python菜鸟编程第一课之开始编程_萨克买单的博客-程序员资料

Python菜鸟编程第一课之开始编程1. 第一条编程语言运行Python程序的三种方式(1)Python解释器环境运行(2)脚本运行(3)IDE(比如 Pycharm、sublime等)1.1print()函数print()是最简单的输出函数print("hello world")print("hello python")print("To be or not to...

【Java架构师面试题】设计模式面试专题(共35题含答案)_设计模式面试题_90后小伙追梦之路的博客-程序员资料

设计模式(DesignPattern)是前辈们对代码开发经验的总结,是解决特定问题的一系列套路。它不是语法规定,而是一套用来提高代码可复用性、可维护性、可读性、稳健性以及安全性的解决方案。本篇为设计模式面试专题,总共收录了35道常见面试题及答案解析,希望能帮到你~1、什么是设计模式?就是经过实践验证的用来解决特定环境下特定问题的解决方案2、设计模式用来干什么?寻找合适的对象决定对象的粒度指定对象的接口描述对象的实现运用复用机制重复使用经过实践验证的正确的,用来解决某一类问题的解决方案

使用 OpenSSL API 进行安全编程_bio_free_all_几米夜空的博客-程序员资料

创建基本的安全连接和非安全连接OpenSSL API 的文档有些含糊不清。因为还没有多少关于 OpenSSL 使用的教程,所以对初学者来说,在 应用程序中使用它可能会有一些困难。那么怎样才能使用 OpenSSL 实现一个基本的安全连接呢? 本教程将帮助您解决这个问题。学习如何实现 OpenSSL 的困难部分在于其文档的不完全。不完全的 API 文档通常会妨碍开发人员 使

随便推点

C/C++内存管理(4)_lien0906的博客-程序员资料

本文将对 Linux? 程序员可以使用的内存管理技术进行概述,虽然关注的重点是 C 语言,但同样也适用于其他语言。文中将为您提供如何管理内存的细节,然后将进一步展示如何手工管理内存,如何使用引用计数或者内存池来半手工地管理内存,以及如何使用垃圾收集自动管理内存。为什么必须管理内存内存管理是计算机编程最为基本的领域之一。在很多脚本语言中,您不必担心内存是如何管理的,这并不能使得内存管

CMake构建、编译OpenCV工程_cmake opencv 会构建子版本号_桔子code的博客-程序员资料

原文链接:http://www.juzicode.com/opencv-note-cmake-project-vs-windowsOpenCV除了提供二进制包,还可以下载其源码手动编译二进制文件,不过源码中并没有提供可以直接编译的工程文件,需要借助CMake工具完成工程文件的构建。获取源码从官网opencv.org找到github链接,或者直接进入https://github.com/opencv/opencv/releases找到相应的版本,这里以4.5.3为例:在该版本下有多个发

排列计算(一维差分)模板_tr-uhpc一维差分模型_paranoidZ的博客-程序员资料

先讲一下一维差分:原数组为a[],设差分数组为d[],用于解决对区间的操作问题。原数组记录每个点被访问的次数,开始都为0.例如:原数组a[]区间[L,R]都加上C则可以先利用差分数组d[L]+=c,d[R+1]-=c,因为差分数组的前缀和为原数组,即可发现,区间[L,R]之间的数都加C了,因为d[R+1]-c了所以[R+1,N]之间的数没有变化例子链接:题目:排列计算来源:牛客网题目描述天才程序员菜哭武和石头组队参加一个叫做国际排列计算竞赛 (International C..

VHDL与VerilogHDL的Testbench模板_FPGA入门到头秃的博客-程序员资料

VHDL与VerilogHDL的Testbench模板一般而言,一个testbench需要包含的部分如下:(1)VHDL:entity 和 architecture的声明;Verilog:module declaration(2)信号声明(3)实例化待测试文件(4)提供仿真激励其中第(4)步是关键所在,需要完成产生时钟信号,以及提供激励信号两个任务。VHDL Testbench中产生...

26设计模式之建造者模式_欢乐斗佛的博客-程序员资料

建造者模式是非常常用的一种设计模式,安卓原生的比如StringBuilder、Dialog就是用的这种设计模式。如果满足以下条件的时候可以考虑使用这种设计模式:1、用来创建一个对象而这个对象是由各种属性组成,创建步骤繁琐。2、对象的创建过程独立于创建该对象的类。3、隔离复杂对象的创建和使用,使得相同的创建过程能创建出不同的产品。该模式的定义为:将一个复杂对象的构建与它的表示分离,使

2021年8月最好用的苹果cms采集站_XoF夜的博客-程序员资料

分享一个CMS采集资源站(2021.08.29最新)采集站:https://vip.smyzj.cn/api.php/provide/vod/?ac=list配置教程在后台依次打开采集>自定义接口>添加(如图所示)资源名称自定义,接口地址填上方的采集站,接口类型为json,资源类型为视频,填写好之后点击测试随后点进刚刚添加的采集站这里分类填你自己的全部设置完后点击采集当日即可自动采集教程我们已经配置完了采集站,可我们要每天手动点击,那...

推荐文章

热门文章

相关标签