cximage功能简介

CxImage是一个可以用于MFC 的C++图像处理类库类,它可以打开,保存,显示,转换各种常见格式的图像文件,比如BMP, JPEG, GIF, PNG, TIFF, MNG, ICO, PCX, TGA, WMF, WBMP, JBG, J2K 等格式的文件。可以实现BMP<->JPG,PNG <>TIFF格式等等的互相转换。

CxImage不仅可以实现图像文件的类型转换,还可以实现在内存图像数据的类型转换,并且使用很方便。除了文件格式的相互转换,它还提供了很多很多图像后处理的功能,比如图像模糊,锐化等等,功能非常强大和实用。

示例: 如何转换一种格式到另外一种格式 

[cpp] view plain copy

  1. CxImage  image;
  2. // bmp -> jpg
  3. image.Load( " image.bmp " , CXIMAGE_FORMAT_BMP);
  4. if (image.IsValid()){
  5. if ( ! image.IsGrayScale()) image.IncreaseBpp( 24 );
  6. image.SetJpegQuality( 80 );
  7. image.Save( " image.jpg " ,CXIMAGE_FORMAT_JPG);
  8. }
  9. // png -> tif
  10. image.Load( " image.png " , CXIMAGE_FORMAT_PNG);
  11. if (image.IsValid()){
  12. image.Save( " image.tif " ,CXIMAGE_FORMAT_TIF);
  13. }

  如何从资源中加载图像

[cpp] view plain copy

  1. // Load the resource IDR_PNG1 from the PNG resource type
  2. CxImage * newImage = new CxImage();
  3. newImage -> LoadResource(FindResource(NULL,MAKEINTRESOURCE(IDR_PNG1),
  4. " PNG " ),CXIMAGE_FORMAT_PNG);
  5. 或者
  6. // Load the resource IDR_JPG1 from DLL
  7. CxImage * newImage = new CxImage();
  8. HINSTANCE hdll = LoadLibrary( " imagelib.dll " );
  9. if (hdll){
  10. HRSRC hres = FindResource(hdll,MAKEINTRESOURCE(IDR_JPG1), " JPG " );
  11. newImage -> LoadResource(hres,CXIMAGE_FORMAT_JPG,hdll);
  12. FreeLibrary(hdll);
  13. }
  14. 或者
  15. // Load a bitmap resource;
  16. HBITMAP bitmap = ::LoadBitmap(AfxGetInstanceHandle(),
  17. MAKEINTRESOURCE(IDB_BITMAP1)));
  18. CxImage * newImage = new CxImage();
  19. newImage -> CreateFromHBITMAP(bitmap);

如何解码内存中的图像 

[cpp] view plain copy

  1. CxImage image((BYTE * )buffer,size,image_type);
  2. 或者
  3. CxMemFile memfile((BYTE * )buffer,size);
  4. CxImage image( & memfile,image_type);
  5. 或者
  6. CxMemFile memfile((BYTE * )buffer,size);
  7. CxImage * image = new CxImage();
  8. image -> Decode( & memfile,type);

 如何对内存中的图像编码 

[cpp] view plain copy

  1. long size = 0 ;
  2. BYTE * buffer = 0 ;
  3. image.Encode(buffer,size,image_type);
  4. ...
  5. image.FreeMemory(buffer);
  6. 或者
  7. CxMemFile memfile;
  8. memfile.Open();
  9. image.Encode( & memfile,image_type);
  10. BYTE * buffer = memfile.GetBuffer();
  11. long size = memfile.Size();
  12. ...
  13. image.FreeMemory(buffer);

  如何创建一副多页的TIFF

[cpp] view plain copy

  1. CxImage * pimage[ 3 ];
  2. pimage[ 0 ] =& image1;
  3. pimage[ 1 ] =& image2;
  4. pimage[ 2 ] =& image3;
  5. FILE * hFile;
  6. hFile = fopen( " multipage.tif " , " w+b " );
  7. CxImageTIF multiimage;
  8. multiimage.Encode(hFile,pimage, 3 );
  9. fclose(hFile);
  10. 或者
  11. FILE * hFile;
  12. hFile = fopen( " c://multi.tif " , " w+b " );
  13. CxImageTIF image;
  14. image.Load( " c://1.tif " ,CXIMAGE_FORMAT_TIF);
  15. image.Encode(hFile, true );
  16. image.Load( " c://2.bmp " ,CXIMAGE_FORMAT_BMP);
  17. image.Encode(hFile, true );
  18. image.Load( " c://3.png " ,CXIMAGE_FORMAT_PNG);
  19. image.Encode(hFile);
  20. fclose(hFile);

如何复制和粘贴图像

[cpp] view plain copy

  1. // 复制(copy)
  2. HANDLE hDIB = image -> CopyToHandle();
  3. if (::OpenClipboard(AfxGetApp() -> m_pMainWnd -> GetSafeHwnd())) {
  4. if (::EmptyClipboard()) {
  5. if (::SetClipboardData(CF_DIB,hDIB) == NULL ) {
  6. AfxMessageBox( " Unable to set Clipboard data " );
  7. }    }    }
  8. CloseClipboard();
  9. // 粘贴(paste)
  10. HANDLE hBitmap = NULL;
  11. CxImage * newima = new CxImage();
  12. if (OpenClipboard()) hBitmap = GetClipboardData(CF_DIB);
  13. if (hBitmap) newima -> CreateFromHANDLE(hBitmap);
  14. CloseClipboard();

  如何在图片框控件(Picture Box)中显示图像 

[cpp] view plain copy

  1. HBITMAP m_bitmap = NULL;
  2. CxImage image( " myfile.png " , CXIMAGE_FORMAT_PNG);
  3. ...
  4. CDC * hdc = m_picture.GetDC();
  5. HBITMAP m_bitmap = image.MakeBitmap(hdc -> m_hDC);
  6. HBITMAP hOldBmp = m_picture.SetBitmap(m_bitmap);
  7. if (hOldBmp) DeleteObject(hOldBmp);
  8. if (hdc -> m_hDC) m_picture.ReleaseDC(hdc);
  9. ...
  10. if (m_bitmap) DeleteObject(m_bitmap);

Cimage合并图片就是这么简单:

[cpp] view plain copy

  1. CxImage t_img1,t_img2,t_img3;
  2. int t_h1,t_w1,t_h2,t_w2,t_h3,t_w3,t_bpp;
  3. t_img1.Load("F://1.jpg");
  4. t_img2.Load("F://2.jpg");
  5. t_h1=t_img1.GetHeight();
  6. t_w1=t_img1.GetWidth();
  7. t_h2=t_img2.GetHeight();
  8. t_w2=t_img2.GetWidth();
  9. t_h3=t_h1;
  10. t_w3=t_w1+t_w2;
  11. t_bpp=t_img1.GetBpp();
  12. t_img3.Create(t_w3,t_h3,t_bpp);
  13. t_img3.MixFrom(t_img1,0,0);
  14. t_img3.MixFrom(t_img2,t_w1,0);
  15. t_img3.Save("f://3.jpg",CXIMAGE_FORMAT_JPG);

译后序:

关于图像处理库,我相信大家有一个共同的疑问:这么多图像处理库,我该如何选择?在CSDN的blog中有这样一段文字,比较透彻地回答了这个问题,感谢作者的透彻解释:

"CxImage类库是一个优秀的图像操作类库。它可以快捷地存取、显示、转换各种图像。有的读者可能说,有那么多优秀的图形库,如OpenIL,FreeImage, PaintLib等等,它们可谓是功能强大,齐全,没必要用其它的类库。但我要说,这些类库基本上没有免费的,使用这些类库,你要被这样那样的许可协议所束缚。

在这点上,CxImage类库是完全免费的。另外,在使用上述类库时,你会遇到重重麻烦。因为它们大部分是平台无关的,且用C语言写成,有的还夹杂着基本的C++ wrapper和成堆德编译选项的声明需要你去处理。而CxImage类库在这方面做得很好。还有让我最看好的,就是作者完全公开了源代码。相对于那些封装好的图形库和GDI+来说,这一点使我们可以进一步学习各种编解码技术,而不再浮于各种技术的表面。"

时间: 2024-10-01 23:23:15

cximage功能简介的相关文章

高效房产中介信息管理软件------房产小蜜书功能简介

房产小蜜书是一款拥有多功能,操作简单,高效率的房产中介信息管理软件,同时,它又是一款营销软件,可以通过云刷新的功能实现云端的自动刷新,让经纪人们告别手动刷新的重复工作.下面就是对房产小蜜书主要功能的介绍. 房产小蜜书的主要功能有: (1) 站点管理:注册需要发布房源的网站,然后将网站的账号与房产小蜜书进行绑定,这是使用房产小蜜书进行信息管理和营销等操作的前提. 图1-1 站点管理 (2)房源信息录入:房源信息录入的作用是讲房源信息存入小蜜书的资料库中:特色在于: 填写小区名称后自动匹配小区区域.

联想教育应用使用说明(7.6版本)——第1章 联想教育应用方案功能简介

第1章联想教育应用方案功能简介 联想教育应用方案是专门为电子教室.网吧等公共机房环境设计开发的,包括硬盘分区管理.硬盘数据保护.CMOS参数保护.网络唤醒.IP分配.网络分组同传.智能同传.智能排程.断电同传以及机房网络管理控制等一系列重要功能,重点解决机房管理员如何快速方便地给机房中的所有计算机安装操作系统.驱动程序和应用软件的问题,以及解决如何快速清除计算机的前一个用户的操作,实现下一个用户使用同一台计算机初始用户环境的问题. 该应用方案具有以下功能特色: 1.能够同时给机房中的多台计算机(

Yii2快速构建RESTful Web服务功能简介

Yii2相比Yii1而言,一个重大的改进是内置了功能完备的RESTful支持. 其内置RESTful支持提供了如下功能: 使用ActiveRecord的通用接口来快速构建原型: 应答格式协商(缺省支持 JSON 和 XML): 可定制的对象序列化,支持选择输出哪些列: 请求数据的格式化以及验证错误: 通过HTTP 动词映射实现高效路由: 支持 OPTIONS 和 HEAD 动词: 认证 和 鉴权: 支持 HATEOAS(RESTful的架构约束,超媒体即应用程序状态): 结果缓存,可使用 yii

SharePoint 2013跨网站集发布功能简介

在SharePoint Server 2013网站实施中,我们经常会遇到跨网站集获取数据,而2013的这一跨网站集发布功能,正好满足我们这样的需求. 使用SharePoint 2013中的跨网站发布,我们可以使用列表和其他库来存储在发布网站上重复使用的内容,通过内容搜索部件来读取配置的跨网站集信息,下面,让我们通过一个简单的例子,了解一下这一功能吧! 1.使用SharePoint 2013跨网站集发布功能,首先需要在源网站和目标网站开启Cross-Site Collection Publishi

Molten 功能简介以及使用指南

<h1 id="molten">Molten 功能简介以及使用指南</h1> <p>Molten项目地址:https://github.com/chuan-yun/Molten</p> <h2 id="">简介</h2> <p>现今随着应用间调用的复杂化,php 开发者们在复杂调用链路追踪上并没有特别好的工具和方法, 流行的php问题定位工具譬如phptrace,xhprof等并不会

HelloX操作系统网络功能简介及使用和开发指南

HelloX网络功能简介及使用和开发指南 HelloX网络功能简介 作为物联网操作系统,网络功能是必备的核心功能之一.按照规划,HelloX实现了两个不同类型的TCP/IP协议栈,一个面向资源受限的嵌入式应用,移植了业界成熟使用的lwIP协议栈.该协议栈简洁明了,功能相对简单,同时专门面向嵌入式领域进行设计和优化,对硬件资源要求很低.另外一个协议栈来自BSD操作系统的协议栈,面向复杂的网络功能丰富的应用场景,比如家庭网关,物联网网关等.为了适应HelloX本身的机制,对BSD协议栈做了一些更改和

Beginning SDL 2.0(1) SDL功能简介

原文链接为 http://wiki.libsdl.org/Introduction. 由于近期整理音视频可视化的技术,发现好久不更新的SDL发布了2.0版本,以前也没有过于关注,这里准备尝试下.了解SDL到底支持哪些功能. 本文部分内容为翻译内容.有任何不当支持请联系我. SDL全名Simple DirectMedia Layer (SDL).官网:http://www.libsdl.org/ What can SDL do? SDL功能简介 Read ahead for an overview

什么是DNN,Dotnetnuke介绍和功能简介

1. What is DNN? DNN是DotNetNuke(DotNet)的简写.它是在IBUYSPY(IBUYSPY是微软用来推广ASP.NET而推出的范例程序)的基础上发展起来的,是一个免费的.开放的源代码框架, 是一个可扩展的内容管理系统(CMS).可广泛应用于创建与维护专业的Web应用程序,如商务网站.企业内网(Intranet).外网网站以及在线内容发布网站. DNN能给我们带来什么?如果你是一个项目开发人员,DNN对于你来说,它可以快速建站:如果你是架构师,那么DNN的模块化思想是

部分GDAL工具功能简介

主要转自http://blog.csdn.net/liminlu0314?viewmode=contents 部分GDAL工具功能简介 gdalinfo.exe 显示GDAL支持的各种栅格文件的信息. gdal_translate.exe 在不同的格式间进行转换.同时,潜在的执行了一些切割.重采样和使像素比例变化的任务. gdalwarp.exe 投影转换和投影绑定.同时也可以进行图像镶嵌.这个程序可以重新投影所支持的投影,而且如果图像("raw" with)控制信息也可以把GCPs