登录  
 加关注
   显示下一条  |  关闭
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!立即重新绑定新浪微博》  |  关闭

图像处理 视频分析 机器视觉 模式识别

方向比努力更重要

 
 
 

日志

 
 
关于我

河北软件开发项目,电子警察卡口项目,公安天网项目,媒体流处理,数字图像处理。媒体服务器 RTSP、图像处理、车牌识别……DCT变换,H.264压缩

使用CxImage进行图形和格式转换  

2010-04-28 08:21:40|  分类: Ximage |  标签: |举报 |字号 订阅

  下载LOFTER 我的照片书  |

Introduction

CxImage is a C++ class to manage almost any kind of images. It can load, save, display, transform images in a very simple and fast way.

Why another image library? Around there are many good libraries (OpenIL, FreeImage, PaintLib ...), these are powerful, complete, and constantly updated. However if you ever try to use them, you may find some difficulties; because these libraries are mainly platform independent, written in C, sometimes with a basic C++ wrapper and with tons of compiler switch declarations. Now with the new GDI+ classes on the scene, maybe CxImage isn't so useful, but at least here you have the source code. It is not a MFC library, altogether it's a windows library, because of some particular constructors and the painting functions, but the backbone is platform independent.

CxImage类库介绍

CxImage类库是一个几乎可以管理所有的图象文件的C++类库。它可以快捷地存取、显示、转换各种图像。

其他的图形库?有那么多优秀的图形库,如OpenIL,FreeImage,PaintLib等等,它们是功能强大,齐全,而且是经常更新的。然而,如果你要使用他们,你可能会遇到一些麻烦,,因为它们大部分是平台无关的,用C语言写成,有的还夹杂着基本的C++ wrapper和大量的编译选项的声明需要你去处理。现在,一个新的GDI+类库来了,或许CxImage不是最有用的,但是至少你是有源代码的。这个类库不是MFC类库,完全是一个windows类库,因为一些特殊的构造和绘图函数,但是基础是平台无关的。

一.在你的程序中使用CxImage(Using MFC in Shared DLL + Debug 模式)

1.下载CxImage类库

地址:http://www.codeproject.com/bitmap/cximage.asp (需要注册)

下载Download full source files (full) - 2.10 Mb

2.解压压缩包,并编译Demo2/Console.dsw,这个过程可能比较慢,中间文件为60M

3.编译完成后搜索*.lib文件,一共搜索出10个文件,把它们复制到你的工程目录中(任意)

它们分别为:CxImage.lib Jpeg.lib png.lib Tiff.lib jbig.lib zlib.lib j2k.lib cximagecrtd.lib(最后一个为静态MFC库时使用)

4.找到压缩包中的CxImage文件夹,把它里面的所有.h头文件,复制到你的工程目录中(任意)

5.在StdAfx.h文件中,添加这些文件

  1. // stdafx.h : include file for standard system include files,

  2. //  or project specific include files that are used frequently, but

  3. //      are changed infrequently

  4. //

  5.  

  6. #if !defined(AFX_STDAFX_H__84F27293_E63B_443C_BA35_5322307D48DA__INCLUDED_)

  7. #define AFX_STDAFX_H__84F27293_E63B_443C_BA35_5322307D48DA__INCLUDED_

  8.  

  9. #if _MSC_VER > 1000

  10. #pragma once

  11. #endif // _MSC_VER > 1000

  12.  

  13. #define VC_EXTRALEAN    // Exclude rarely-used stuff from Windows headers

  14.  

  15. #include <afxwin>         // MFC core and standard components

  16. #include <afxext>         // MFC extensions

  17. #include <afxdisp>        // MFC Automation classes

  18. #include <afxdtctl>             // MFC support for Internet Explorer 4 Common Controls

  19. #ifndef _AFX_NO_AFXCMN_SUPPORT

  20. #include <afxcmn>               // MFC support for Windows Common Controls

  21. #endif // _AFX_NO_AFXCMN_SUPPORT

  22.  

  23. //添加CxImage到你的程序中(目录为你上面添加位置,我把它们放在了lib文件夹中了)

  24. #include "lib/ximage.h"

  25. //#pragma comment(lib,"lib/cximagecrtd.lib") //静态链接库时使用

  26. #pragma comment(lib,"lib/cximage.lib")

  27. #pragma comment(lib,"lib/Jpeg.lib")

  28. #pragma comment(lib,"lib/consoled.lib")

  29. #pragma comment(lib,"lib/png.lib")

  30. #pragma comment(lib,"lib/zlib.lib")

  31. #pragma comment(lib,"lib/tiff.lib")

  32. #pragma comment(lib,"lib/jasper.lib")

  33. #pragma comment(lib,"lib/j2k.lib")

  34. #pragma comment(lib,"lib/jbig.lib")

  35.  

  36. //{{AFX_INSERT_LOCATION}}

  37. // Microsoft Visual C++ will insert additional declarations immediately before the previous line.

  38.  

  39. #endif // !defined(AFX_STDAFX_H__84F27293_E63B_443C_BA35_5322307D48DA__INCLUDED_)

6.这样就可以在你的程序中使用CxImage类了

7.演示程序

  1. void CTestDlg::OnButton1()

  2. {

  3.         // TODO: Add your control notification handler code here

  4.        

  5.         //取得你的图片资源文件IDB_BITMAP1     

  6.         HBITMAP bitmap = ::LoadBitmap(AfxGetInstanceHandle(),

  7.                 MAKEINTRESOURCE(IDB_BITMAP1));

  8.        

  9.         //创建对象

  10.         CxImage *newImage = new CxImage();

  11.         newImage->CreateFromHBITMAP(bitmap);

  12.  

  13.         //存储为文件,我发现的可以使用的有6个格式有三个格式未使用成功(gif,wbmg,wmf)....够用了吧?

  14.         newImage->Save("image.bmp",CXIMAGE_FORMAT_BMP); //注意不是CXIMAGE_SUPPORT_BMP

  15.         newImage->Save("image.tga",CXIMAGE_FORMAT_TGA);

  16.         newImage->Save("image.pcx",CXIMAGE_FORMAT_PCX);

  17.         newImage->Save("image.jpg",CXIMAGE_FORMAT_JPG);

  18.         newImage->Save("image.png",CXIMAGE_FORMAT_PNG);

  19.         newImage->Save("image.tiff",CXIMAGE_FORMAT_TIF);

  20.  

  21.         newImage->Save("image.gif",CXIMAGE_FORMAT_GIF); //不成功,只能读取第一贞图片?

  22.         newImage->Save("image.wbmp",CXIMAGE_FORMAT_WBMP); //不成功

  23.         newImage->Save("image.wmf",CXIMAGE_FORMAT_WMF); //不成功

  24.  

  25.         newImage->Save("image.mng",CXIMAGE_FORMAT_MNG); //默认-未打开此项功能

  26.         newImage->Save("image.jbig",CXIMAGE_FORMAT_JBG); //默认-未打开此项功能

  27.         /*

  28.          * CxImage配置文件ximacfg.h

  29.          * #define CXIMAGE_SUPPORT_BMP 1 //可用状态(即不可取得和转换成这种格式)

  30.          * #define CXIMAGE_SUPPORT_MNG 0 //不可用状态

  31.         */

  32. }

其他说明

1.所支持的格式(in Doc)

formats #define required libraries size [Kbyte]
BMP

GIF

ICO

TGA

PCX

WBMP

WMF

CXIMAGE_SUPPORT_BMP

CXIMAGE_SUPPORT_GIF

CXIMAGE_SUPPORT_ICO

CXIMAGE_SUPPORT_TGA

CXIMAGE_SUPPORT_PCX

CXIMAGE_SUPPORT_WBMP

CXIMAGE_SUPPORT_WMF

built in

24

JPEG CXIMAGE_SUPPORT_JPG

jpeg

88

PNG CXIMAGE_SUPPORT_PNG

png, zlib

104

MNG CXIMAGE_SUPPORT_MNG

mng, zlib, jpeg

148

TIFF CXIMAGE_SUPPORT_TIF

tiff, zlib, jpeg

124

JBIG CXIMAGE_SUPPORT_JBG

jbig

28

PNM,PPM,PGM

RAS

CXIMAGE_SUPPORT_PNM

CXIMAGE_SUPPORT_RAS

jasper

176

JPEG-2000

CXIMAGE_SUPPORT_JP2

CXIMAGE_SUPPORT_JPC

CXIMAGE_SUPPORT_PGX

jasper

176

2.格式转换示例

  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(99);

  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. }

3.使用CxImage(In Doc),至今未弄懂....也没按这个弄好过...不知道为什么

  1. Project Settings

  2.  |- C/C++

  3.  |   |- Code Generation

  4.  |   |   |- Use run-time library : Multithreaded DLL (must be the same for

  5.  |   |   |  all the linked libraries)

  6.  |   |   |- Struct member alignment : must be the same for all the linked

  7.  |   |   |  libraries

  8.  |   |- Precompiled headers : not using precompiled headers

  9.  |   |- Preprocessor

  10.  |       |- Additional Include Directories:  ..cximage

  11.  |- Link

  12.     |- General

  13.         |- Object/library modules: ../png/Debug/png.lib

  14.                                    ../jpeg/Debug/jpeg.lib

  15.                                    ../zlib/Debug/zlib.lib

  16.                                    ../tiff/Debug/tiff.lib

  17.                                    ../jasper/Debug/jasper.lib

  18.                                     ../cximage/Debug/cximage.lib  ...

二.使用CxImage(Using MFC in a Static Library + Debug 模式)

1.解压压缩包,打开Demo2/Console.dsw,设置如下:

Project -> Setting -> Using MFC in a Static Library(注意是所有的项目都设置成这个)

2.确保c/c++ -> Code Generation -> Using run-time library 为 Mutithreaded

3.Debug模式下编译,搜索*.lib文件,复制到工程目录,包含进工程(当前工程也必须是Using MFC in a Static Library + Debug 模式),即可,包含方法同上

注意:生成的LIB文件,比上面要少一个....不知道为什么...少了consoled.lib,但并无大碍,不包含它即可

三.使用CxImage(Using MFC in a Static Library + Realese 模式)

1.解压压缩包,打开Demo2/Console.dsw,设置如下:

Project -> Setting -> Using MFC in a Static Library(注意是所有的项目都设置成这个)

2.确保c/c++ -> Code Generation -> Using run-time library 为 Mutithreaded

3.Realese模式下编译,搜索*.lib文件,复制到工程目录,包含进工程(当前工程也必须是Using MFC in a Static Library + Realese模式),即可,包含方法同上

注意:生成的LIB文件,同样是少一个,不包含它即可

参考:

Open the CxImage workspace with all the libraries. Select Project->Properties. Select each project in the list and make sure they all have the same settings for the MFC library (Not Using MFC for a static library). Then select the C/C++ tab and select Code Generation in the combo box. In the Use Run-time Library combo box, make sure all of them are set to Single-Threaded (or multi threaded depending on your settings). Then remake all the libraries and try to recompile your project

Thanks Kelly. It works! Thanks again!:) It turns out that CxImage static lib projects, in my case, are not set uniformly the same; some uses MFC shared library while some uses MFC static library

  评论这张
 
阅读(3622)| 评论(0)

历史上的今天

评论

<#--最新日志,群博日志--> <#--推荐日志--> <#--引用记录--> <#--博主推荐--> <#--随机阅读--> <#--首页推荐--> <#--历史上的今天--> <#--被推荐日志--> <#--上一篇,下一篇--> <#-- 热度 --> <#-- 网易新闻广告 --> <#--右边模块结构--> <#--评论模块结构--> <#--引用模块结构--> <#--博主发起的投票-->
 
 
 
 
 
 
 
 
 
 
 
 
 
 

页脚

网易公司版权所有 ©1997-2018