官方下载地址是:http://www.xdp.it/cximage/

打开工程后可以看到下例这些工程:

- CxImage

- CxImageCrtDll

- CxImageMfcDll

- dome

- domeDll

- jasper

- jbig

- jpeg

- libdcr

- mng

- png

- tiff

- zlib

1。首先我们要确定在程序中是希望静态链接还是动态链接,在这里我建议大家使用动态链接,因为这个库有点大,如果使用静态链接的话你的应用程序体积会额外增加1MB多。

2。然后确定在MFC中使用还是在CRT环境中使用,这个库专门为你建了这两个工程来创建不同环境中使用的运行时库,跟据你的需求来选择编译CxImageCrtDll还是CxImageMfcDll工程,如果你希望使用静态库链接的话除了这两个工程不需要编译其它的工程都需要编译。并且在引用这个静态库的时候要把这些所有编译过的工程里的*.lib全部拷到你的程里去。

3。OK编译完工程后将以下文件拷到你建立的工程里去

先将头文件拷到你的工程里去:

xfile.h、ximacfg.h、ximadef.h、ximage.h、xiofile.h、xmemfile.h

使用静态链接需要拷以下文件:

cximage.lib、png.lib、Jpeg.lib、jbig.lib、Tiff.lib、libdcr.lib、jasper.lib、zlib.lib、mng.lib

如用动态链接需要拷以下文件:

cximage.lib、cximage.dll

4。在你的工程里引用这个库#include "ximage.h"、#pragma comment(lib, "cximage.lib")如果是静态链接拷过来的那些*.lib文件全部要引用进去否则无法链接,在这里有人可能会问既然只包含了"ximage.h"这一个头文件为什么要拷那么多头文件过来呢?这是因为"ximage.h"这个头文件依赖那几个头文件所以必须拷过来。

5。现在你就可以使用这个CxImage库了,那我们来加载一幅图片然后将它显示出来吧:

  1. CxImage  image; // 定义一个CxImage对象
  2. image.Load("Ooopsy.png", CXIMAGE_FORMAT_PNG); // 加载一幅png图片
  3. // 在OnPaint消息里显示出来
  4. image.Draw(dc.GetSafeHdc(), 0, 0);

以上只介绍最简单的用法,至于基它的功能你就自已尝试,我就不多说了,要是我一下子说完了CxImage开发者就不需要写文档说明了,在它的跟目录下有一个index.htm这就是它的文档起始页,如果你需要的话就自已去看吧!

具体应用技巧

1、打开一张图
可以通过创建一个新的CxImage对象来完成,通过构造函数来打开一张图

  1. CxImage::CxImage(const char * filename, DWORD imagetype)

其中filename是需要打开的文件路径,imagetype是文件类型,支持的类型有:

  1. CXIMAGE_FORMAT_UNKNOWN,CXIMAGE_FORMAT_BMP,CXIMAGE_FORMAT_GIF,CXIMAGE_FORMAT_JPG,CXIMAGE_FORMAT_PNG,CXIMAGE_FORMAT_MNG,CXIMAGE_FORMAT_ICO,CXIMAGE_FORMAT_TIF,CXIMAGE_FORMAT_TGA,CXIMAGE_FORMAT_PCX,CXIMAGE_FORMAT_WBMP,CXIMAGE_FORMAT_WMF,CXIMAGE_FORMAT_J2K,CXIMAGE_FORMAT_JBG,CXIMAGE_FORMAT_JP2,CXIMAGE_FORMAT_JPC,CXIMAGE_FORMAT_PGX,CXIMAGE_FORMAT_PNM,CXIMAGE_FORMAT_RAS,

当然,这么多格式很难记住,我们可以通过如下函数来直接获得文件的格式。

  1. int FindType(const CString& filename)
  2. {
  3. CString ext = filename.Right(filename.GetLength()-filename.ReverseFind('.')-1);
  4. int type = 0;
  5. if (ext == "bmp") type = CXIMAGE_FORMAT_BMP;
  6. #if CXIMAGE_SUPPORT_JPG
  7. else if (ext=="jpg"||ext=="jpeg") type = CXIMAGE_FORMAT_JPG;
  8. #endif
  9. #if CXIMAGE_SUPPORT_GIF
  10. else if (ext == "gif") type = CXIMAGE_FORMAT_GIF;
  11. #endif
  12. #if CXIMAGE_SUPPORT_PNG
  13. else if (ext == "png") type = CXIMAGE_FORMAT_PNG;
  14. #endif
  15. #if CXIMAGE_SUPPORT_MNG
  16. else if (ext=="mng"||ext=="jng") type = CXIMAGE_FORMAT_MNG;
  17. #endif
  18. #if CXIMAGE_SUPPORT_ICO
  19. else if (ext == "ico") type = CXIMAGE_FORMAT_ICO;
  20. #endif
  21. #if CXIMAGE_SUPPORT_TIF
  22. else if (ext=="tiff"||ext=="tif") type = CXIMAGE_FORMAT_TIF;
  23. #endif
  24. #if CXIMAGE_SUPPORT_TGA
  25. else if (ext=="tga") type = CXIMAGE_FORMAT_TGA;
  26. #endif
  27. #if CXIMAGE_SUPPORT_PCX
  28. else if (ext=="pcx") type = CXIMAGE_FORMAT_PCX;
  29. #endif
  30. #if CXIMAGE_SUPPORT_WBMP
  31. else if (ext=="wbmp") type = CXIMAGE_FORMAT_WBMP;
  32. #endif
  33. #if CXIMAGE_SUPPORT_WMF
  34. else if (ext=="wmf"||ext=="emf") type = CXIMAGE_FORMAT_WMF;
  35. #endif
  36. #if CXIMAGE_SUPPORT_J2K
  37. else if (ext=="j2k"||ext=="jp2") type = CXIMAGE_FORMAT_J2K;
  38. #endif
  39. #if CXIMAGE_SUPPORT_JBG
  40. else if (ext=="jbg") type = CXIMAGE_FORMAT_JBG;
  41. #endif
  42. #if CXIMAGE_SUPPORT_JP2
  43. else if (ext=="jp2"||ext=="j2k") type = CXIMAGE_FORMAT_JP2;
  44. #endif
  45. #if CXIMAGE_SUPPORT_JPC
  46. else if (ext=="jpc"||ext=="j2c") type = CXIMAGE_FORMAT_JPC;
  47. #endif
  48. #if CXIMAGE_SUPPORT_PGX
  49. else if (ext=="pgx") type = CXIMAGE_FORMAT_PGX;
  50. #endif
  51. #if CXIMAGE_SUPPORT_RAS
  52. else if (ext=="ras") type = CXIMAGE_FORMAT_RAS;
  53. #endif
  54. #if CXIMAGE_SUPPORT_PNM
  55. else if (ext=="pnm"||ext=="pgm"||ext=="ppm") type = CXIMAGE_FORMAT_PNM;
  56. #endif
  57. else type = CXIMAGE_FORMAT_UNKNOWN;
  58. return type;
  59. }

2、保存一张图

  1. bool CxImage::Save(LPCWSTR filename, DWORD imagetype=0)

参数和上面是一样的。
3、得到图形数据,以便在OpenGL中使用材质

  1. BYTE* CxImage::GetBits(DWORD row = 0);

4、得到图形大小

  1. long GetSize();

5、得到图形高度和宽度

  1. DWORD CxImage::GetHeight();
  2. DWORD CxImage::GetWidth();

6、得到文件类型

  1. DWORD CxImage::GetType() const;

7、得到最后一个错误

  1. char* CxImage::GetLastError();

8、在界面中绘制出来

  1. long CxImage::Draw(HDC hdc, const RECT& rect, RECT* pClipRect=NULL)

HDC 绘图设备,rect 绘图的区域,确定绘图的左上角和右下角坐标。pClipRect,裁剪区域,一般可以和绘图区域一样大小,除非特殊需要。

CxImage类库是一个优秀的图像操作类库。它可以快捷地存取、显示、转换各种图像。有的读者可能说,有那么多优秀的图形库,如OpenIL,FreeImage,PaintLib等等,它们可谓是功能强大,齐全,没必要用其它的类库。但我要说,这些类库基本上没有免费的,使用这些类库,你要被这样那样的许可协议所束缚。在这点上,CxImage类库是完全免费的。另外,在使用上述类库时,你会遇到重重麻烦。因为它们大部分是平台无关的,且用C语言写成,有的还夹杂着基本的C++ wrapper和成堆德编译选项的声明需要你去处理。而CxImage类库在这方面做得很好。还有让我最看好的,就是作者完全公开了源代码。相对于那些封装好的图形库和GDI+来说,这一点使我们可以进一步学习各种编解码技术,而不再浮于各种技术的表面。 CxImage类库的结构:

一个CxImage对象是一个扩展了的位图。作者只是在位图结构上添加了一些起存储信息作用的成员变量。一个CxImage对象(同时)也是一组层。每个层只有在需要时才会分配相应的缓冲区。CxImage::pDib代表着背景图像,CxImage::pAlpha代表着透明层,CxImage::pSelection代表着被选中的层,被用来创建图像处理时让用户感兴趣的区域。在这三个特殊层面的基础上,你可以增加一些额外的层,这些层可以存储在CxImage::pLayers中。一般说来,层是一个完整的CxImage对象。因此,你可以构造很复杂的嵌套层。下面是CxImage的一些成员变量:

CxImage学习的更多相关文章

  1. CxImage图像库的使用 .

    http://blog.csdn.net/wangjie0377/article/details/7830405 CxImage图像库 CxImage下载地址:http://www.codeproje ...

  2. 值得学习的C语言开源项目

    值得学习的C语言开源项目   - 1. Webbench Webbench是一个在linux下使用的非常简单的网站压测工具.它使用fork()模拟多个客户端同时访问我们设定的URL,测试网站在压力下工 ...

  3. 在别的地方看的<<给程序员介绍一些C++开源库>>,记录给大家共同学习

    首先说明这篇文章不是出自我手,大家共同学习. 引用地址:http://oss.org.cn/?action-viewnews-itemid-61998. C++开源库,欢迎补充. C++在“商业应用” ...

  4. 【转】CxImage图像库的使用

    CxImage下载地址:http://www.codeproject.com/KB/graphics/cximage/cximage600_full.zip 作者:Davide Pizzolato C ...

  5. 【转载】VC++中的图像类型转换--使用开源CxImage类库

    一.CxImage类库简介 这只是翻译了CxImage开源项目主页上的部分简介及简单使用. CxImage类库是一个优秀的图像操作类库.它可以快捷地存取.显示.转换各种图像.有的读者可能说,有那么多优 ...

  6. MFC/VC CxImage 简单配置与使用 (完整版)

    如果本篇文章还不能解决你在生成解决方案以及便宜过程中的问题 请参阅: http://blog.csdn.net/afterwards_/article/details/7997385 我个人配置过来成 ...

  7. 值得学习的C/C++开源框架(转)

    值得学习的C语言开源项目 - 1. Webbench Webbench是一个在linux下使用的非常简单的网站压测工具.它使用fork()模拟多个客户端同时访问我们设定的URL,测试网站在压力下工作的 ...

  8. C++的一些不错开源框架,可以学习和借鉴

    from https://www.cnblogs.com/charlesblc/p/5703557.html [本文系外部转贴,原文地址:http://coolshell.info/c/c++/201 ...

  9. CxImage新手教程,图文并茂

    作为一个游戏client程序猿,须要对图像处理有一定的知识. CxImage是C++实现的功能强大的.能处理多种文件格式的图像管理类.它可以简单高速的实现图像的导入.保存.显示和变换. 同一时候又具有 ...

随机推荐

  1. C/C++ 工具函数 —— 大端模式和小端模式的互换

    小端模式:小在小,大在大:大端模式:小在大,大在小: uint32_t swap_endian(uint32_t val) { val = ((val << 8) & 0xFF00 ...

  2. [jzoj 5664] [GDOI2018Day1模拟4.6] 凫趋雀跃 解题报告(容斥原理)

    interlinkage: https://jzoj.net/senior/#contest/show/2703/3 description: solution: 考虑容斥原理,枚举不合法的走的步数 ...

  3. 基于macOS+VMware的GNS3内VM上公网

    笔者经常需要做网络实验,GNS3就是笔者最喜欢用的模拟器,为了便于实验,需要能从macos上直接ssh登陆模拟出来的vm,并且vm需要上公网.经过研究,已解决此问题,并以此分享出来 tag: maco ...

  4. (转)用Lottie制作动画,我的月薪翻了一番!!

    Lottie是Airbnb发布的开源动画库. 帮助动效落地.学会使用Lottie,会极大地提高工作效率. Lottie是一种新的开发动画的方式. 学会使用Lottie,会极大改善你和开发小哥哥撕逼的情 ...

  5. 数据库过滤操作中 != 或者 <> 指定操作数并不能改匹配到NULL值

    数据库过滤操作中 != 或者 <> 指定操作数并不能改匹配到NULL值

  6. Java之Object类

    0 引言 Object类是类层次结构的根,Java中所有的类从根本上都继承自这个类.Object类是Java中唯一没有父类的类. 其他所有的类,包括标准容器类,比如数组,都继承了Object类中的方法 ...

  7. luoguP1002

    p1002 题意: 从坐标A到坐标B的可能路线(有一些点不能走)情况,很明显可以看出用dp做 m[i][j]=m[i-1][j]+m[i][j-1](注意处理不能走的点) 自己在初始化时犯了错,第1行 ...

  8. 8、Situation-Dependent Combination of Long-Term and Session-Based Preferences in Group Recommendations: An Experimental Analysis ----组推荐中基于长期和会话偏好的情景依赖组合

    一.摘要: 背景:会话组推荐系统的一个主要挑战是如何适当地利用群组成员之间的交互引起用户偏好,这可能会偏离用户的长期偏好.长期偏好和群组诱导的偏好之间的相对重要性应该根据具体的群组设置而变化. 本文: ...

  9. C IO programming test code

    #include <stdio.h> #include <sys/types.h> #include <sys/stat.h> #include <fcntl ...

  10. d3代码如何改造成update结构(恰当处理enter和exit)

    d3的enter和exit 网上有很多blog讲解.说的还凑合的见:https://blog.csdn.net/nicolecc/article/details/50786661 如何把自己的rude ...