cximage功能简介
CxImage是一个可以用于MFC 的C++图像处理类库类,它可以打开,保存,显示,转换各种常见格式的图像文件,比如BMP, JPEG, GIF, PNG, TIFF, MNG, ICO, PCX, TGA, WMF, WBMP, JBG, J2K 等格式的文件。可以实现BMP<->JPG,PNG <>TIFF格式等等的互相转换。
CxImage不仅可以实现图像文件的类型转换,还可以实现在内存图像数据的类型转换,并且使用很方便。除了文件格式的相互转换,它还提供了很多很多图像后处理的功能,比如图像模糊,锐化等等,功能非常强大和实用。
示例: 如何转换一种格式到另外一种格式
- CxImage image;
- // bmp -> jpg
- image.Load( " image.bmp " , CXIMAGE_FORMAT_BMP);
- if (image.IsValid()){
- if ( ! image.IsGrayScale()) image.IncreaseBpp( 24 );
- image.SetJpegQuality( 80 );
- image.Save( " image.jpg " ,CXIMAGE_FORMAT_JPG);
- }
- // png -> tif
- image.Load( " image.png " , CXIMAGE_FORMAT_PNG);
- if (image.IsValid()){
- image.Save( " image.tif " ,CXIMAGE_FORMAT_TIF);
- }
如何从资源中加载图像
- // Load the resource IDR_PNG1 from the PNG resource type
- CxImage * newImage = new CxImage();
- newImage -> LoadResource(FindResource(NULL,MAKEINTRESOURCE(IDR_PNG1),
- " PNG " ),CXIMAGE_FORMAT_PNG);
- 或者
- // Load the resource IDR_JPG1 from DLL
- CxImage * newImage = new CxImage();
- HINSTANCE hdll = LoadLibrary( " imagelib.dll " );
- if (hdll){
- HRSRC hres = FindResource(hdll,MAKEINTRESOURCE(IDR_JPG1), " JPG " );
- newImage -> LoadResource(hres,CXIMAGE_FORMAT_JPG,hdll);
- FreeLibrary(hdll);
- }
- 或者
- // Load a bitmap resource;
- HBITMAP bitmap = ::LoadBitmap(AfxGetInstanceHandle(),
- MAKEINTRESOURCE(IDB_BITMAP1)));
- CxImage * newImage = new CxImage();
- newImage -> CreateFromHBITMAP(bitmap);
如何解码内存中的图像
- CxImage image((BYTE * )buffer,size,image_type);
- 或者
- CxMemFile memfile((BYTE * )buffer,size);
- CxImage image( & memfile,image_type);
- 或者
- CxMemFile memfile((BYTE * )buffer,size);
- CxImage * image = new CxImage();
- image -> Decode( & memfile,type);
如何对内存中的图像编码
- long size = 0 ;
- BYTE * buffer = 0 ;
- image.Encode(buffer,size,image_type);
- ...
- image.FreeMemory(buffer);
- 或者
- CxMemFile memfile;
- memfile.Open();
- image.Encode( & memfile,image_type);
- BYTE * buffer = memfile.GetBuffer();
- long size = memfile.Size();
- ...
- image.FreeMemory(buffer);
如何创建一副多页的TIFF
- CxImage * pimage[ 3 ];
- pimage[ 0 ] =& image1;
- pimage[ 1 ] =& image2;
- pimage[ 2 ] =& image3;
- FILE * hFile;
- hFile = fopen( " multipage.tif " , " w+b " );
- CxImageTIF multiimage;
- multiimage.Encode(hFile,pimage, 3 );
- fclose(hFile);
- 或者
- FILE * hFile;
- hFile = fopen( " c://multi.tif " , " w+b " );
- CxImageTIF image;
- image.Load( " c://1.tif " ,CXIMAGE_FORMAT_TIF);
- image.Encode(hFile, true );
- image.Load( " c://2.bmp " ,CXIMAGE_FORMAT_BMP);
- image.Encode(hFile, true );
- image.Load( " c://3.png " ,CXIMAGE_FORMAT_PNG);
- image.Encode(hFile);
- fclose(hFile);
如何复制和粘贴图像
- // 复制(copy)
- HANDLE hDIB = image -> CopyToHandle();
- if (::OpenClipboard(AfxGetApp() -> m_pMainWnd -> GetSafeHwnd())) {
- if (::EmptyClipboard()) {
- if (::SetClipboardData(CF_DIB,hDIB) == NULL ) {
- AfxMessageBox( " Unable to set Clipboard data " );
- } } }
- CloseClipboard();
- // 粘贴(paste)
- HANDLE hBitmap = NULL;
- CxImage * newima = new CxImage();
- if (OpenClipboard()) hBitmap = GetClipboardData(CF_DIB);
- if (hBitmap) newima -> CreateFromHANDLE(hBitmap);
- CloseClipboard();
如何在图片框控件(Picture Box)中显示图像
- HBITMAP m_bitmap = NULL;
- CxImage image( " myfile.png " , CXIMAGE_FORMAT_PNG);
- ...
- CDC * hdc = m_picture.GetDC();
- HBITMAP m_bitmap = image.MakeBitmap(hdc -> m_hDC);
- HBITMAP hOldBmp = m_picture.SetBitmap(m_bitmap);
- if (hOldBmp) DeleteObject(hOldBmp);
- if (hdc -> m_hDC) m_picture.ReleaseDC(hdc);
- ...
- if (m_bitmap) DeleteObject(m_bitmap);
Cimage合并图片就是这么简单:
- CxImage t_img1,t_img2,t_img3;
- int t_h1,t_w1,t_h2,t_w2,t_h3,t_w3,t_bpp;
- t_img1.Load("F://1.jpg");
- t_img2.Load("F://2.jpg");
- t_h1=t_img1.GetHeight();
- t_w1=t_img1.GetWidth();
- t_h2=t_img2.GetHeight();
- t_w2=t_img2.GetWidth();
- t_h3=t_h1;
- t_w3=t_w1+t_w2;
- t_bpp=t_img1.GetBpp();
- t_img3.Create(t_w3,t_h3,t_bpp);
- t_img3.MixFrom(t_img1,0,0);
- t_img3.MixFrom(t_img2,t_w1,0);
- t_img3.Save("f://3.jpg",CXIMAGE_FORMAT_JPG);
译后序:
关于图像处理库,我相信大家有一个共同的疑问:这么多图像处理库,我该如何选择?在CSDN的blog中有这样一段文字,比较透彻地回答了这个问题,感谢作者的透彻解释:
"CxImage类库是一个优秀的图像操作类库。它可以快捷地存取、显示、转换各种图像。有的读者可能说,有那么多优秀的图形库,如OpenIL,FreeImage, PaintLib等等,它们可谓是功能强大,齐全,没必要用其它的类库。但我要说,这些类库基本上没有免费的,使用这些类库,你要被这样那样的许可协议所束缚。
在这点上,CxImage类库是完全免费的。另外,在使用上述类库时,你会遇到重重麻烦。因为它们大部分是平台无关的,且用C语言写成,有的还夹杂着基本的C++ wrapper和成堆德编译选项的声明需要你去处理。而CxImage类库在这方面做得很好。还有让我最看好的,就是作者完全公开了源代码。相对于那些封装好的图形库和GDI+来说,这一点使我们可以进一步学习各种编解码技术,而不再浮于各种技术的表面。"
cximage功能简介的更多相关文章
- DYN-B201 Dynamics CRM 云生产力解决方案与功能简介
DYN-B201 Dynamics CRM 云生产力解决方案与功能简介 讲师:王健.林松涛Dynamics CRM 云产品正式落地中国,CRM 与 Azure.O365 深度整合无缝集成,带来无与伦比 ...
- (视频) 《快速创建网站》 2.3 WordPress初始化和功能简介
本文是<快速创建网站>系列的第4篇,如果你还没有看过之前的内容,建议你点击以下目录中的章节先阅读其他内容再回到本文. 访问本系列目录,请点击:http://devopshub.cn/tag ...
- SharePoint 2013 "通知我"功能简介
功能简介 "通知我"主要是在列表或者文档库里面的项目,有添加/删除/修改等操作,发送邮件通知设置的用户的功能:可以针对列表或者文档库设置通知,也可以针对单一项目设置通知功能,是Sh ...
- Beginning SDL 2.0(1) SDL功能简介
原文链接为 http://wiki.libsdl.org/Introduction. 由于近期整理音视频可视化的技术,发现好久不更新的SDL发布了2.0版本,以前也没有过于关注,这里准备尝试下.了解S ...
- HelloX操作系统网络功能简介及使用和开发指南
HelloX网络功能简介及使用和开发指南 HelloX网络功能简介 作为物联网操作系统,网络功能是必备的核心功能之一.按照规划,HelloX实现了两个不同类型的TCP/IP协议栈,一个面向资源受限的嵌 ...
- 部分GDAL工具功能简介
主要转自http://blog.csdn.net/liminlu0314?viewmode=contents 部分GDAL工具功能简介 gdalinfo.exe 显示GDAL支持的各种栅格文件的信息. ...
- 全国天气预报信息数据 API 功能简介与代码调用实战视频
此文章对开放数据接口 API 之「全国天气预报信息数据 API」进行了功能介绍.使用场景介绍以及调用方法的说明,供用户在使用数据接口时参考之用,并对实战开发进行了视频演示. 1. 产品功能 接口开放了 ...
- Hadoop生态圈-Ambari控制台功能简介
Hadoop生态圈-Ambari控制台功能简介 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 在经历一系列安装过程之后(部署过HDP后我终于发现为什么大家喜欢用它了,部署比CDH简 ...
- Redis安装和主要功能简介
Redis安装和主要功能简介 Redis(https://redis.io/), 是一个内存中的数据结构存储系统,它可以用作数据库.缓存和消息中间件. 安装Redis 我很少在开发机中直接装各种数 ...
随机推荐
- 关于Win 10的隐私保护政策
近日.有人责备Win10收集用户信息,事实上这样的指责并不公平,比方:"Privacy Groups Claim Microsoft Uses Windows 10 as Big Broth ...
- Python学习历程之模块浅识
# =============================操作系统模块=======================# import os# 待续# ======================= ...
- Redis学习笔记(一) 初识 Redis
简介 我所在的公司是一个以线下业务为主的公司,软件这一块的东西可以说是手工作坊,技术上的东西全靠大家自己折腾.最近也是觉得自己在社会主义的怀抱里安逸了太久,要提高思想政治觉悟,不能忘了资本主义的黑暗, ...
- windows安装mysql注意点
MySQL安装文件分为两种,一种是msi格式的,一种是zip格式的. 以msi格式安装完成后,先别忙着启动mysql,我们还需要修改一下配置文件(如果没有配置,之后启动的时候就会出现图中的错误哦!:错 ...
- 视图 Model转集合
@{ Layout = null;}@using MvcApplication2.Models <!DOCTYPE html> <html><head> ...
- JQuery事件绑定,bind与on区别
jquery事件绑定bind:向匹配元素添加一个或多个事件处理器 $(selector).bind("click",data,function); live:向当前或未来的匹配元素 ...
- 关于在bootstrap的tab栏中渲染echats图表,切换tab时echats不显示问题
在开发过程中遇到这样个问题: 利用bootstrap中的tab栏,每当点击tab栏的导航时,echats仅仅只渲染第一个tab的内容,切换tab时,echats图表不显示. 其html代码为: < ...
- 蓝桥杯_left and throw
思考了许久没有结果,最后,还是一位擅长搜索资源的学长帮我找到了一个不错的代码,这个代码极其精妙,再一次印证了一句话,没有做不到的,只有想不到的,当然这个代码我拿到手的时候是个没有注释的代码,我费尽周折 ...
- Eclipse中重置(还原)GIT分支
重置(还原)GIT分支: 1. 右击项目——Team——Reset…: 2. 在弹出的Reset框中选择要重置(还原)的分支——Reset,即可完成.
- 【BZOJ3309】DZY Loves Math - 莫比乌斯反演
题意: 对于正整数n,定义$f(n)$为$n$所含质因子的最大幂指数.例如$f(1960)=f(2^3 * 5^1 * 7^2)=3$,$f(10007)=1$,$f(1)=0$. 给定正整数$a,b ...