VC++中的图像类型转换--使用开源CxImage类库

合集下载

c语言image用法 -回复

c语言image用法 -回复

c语言image用法-回复C语言image用法C语言是一种通用的编程语言,广泛应用于各种领域,包括图像处理。

在C语言中,image用法非常重要,它可以帮助我们处理图像数据,并对其进行各种操作。

本文将会详细介绍C语言中image的用法,从图像的读取到图像的处理,帮助读者了解如何使用image来处理图像数据。

首先,我们需要了解如何读取图像。

在C语言中,读取图像通常需要借助第三方库,最常用的是OpenCV库。

OpenCV是一种开源的计算机视觉库,提供了很多图像处理的功能,并支持多种图像格式。

要使用OpenCV 库,我们需要在程序中包含相应的头文件,并链接相应的库文件。

下面是一个简单的例子:c#include <opencv2/opencv.hpp>#include <iostream>using namespace cv;using namespace std;int main() {Mat image;image = imread("image.jpg", IMREAD_COLOR);if (image.empty()) {cout << "Could not open or find the image" << endl;return -1;}namedWindow("Display window", WINDOW_AUTOSIZE);imshow("Display window", image);waitKey(0);return 0;}在这个例子中,我们首先包含了OpenCV的头文件,并使用`using namespace`语句简化了对OpenCV的使用。

然后我们定义了一个`Mat`类型的变量`image`,用来存储图像数据。

通过`imread`函数读取了一张名为"image.jpg"的图像,并将图像数据保存到`image`中。

cximage交叉编译

cximage交叉编译

cximage是一个用于处理图像的开源库,它支持多种图像格式的读取、写入和转换。

如果你想在特定的平台或设备上交叉编译cximage,你需要遵循几个步骤。

下面是一个基本的指南:
1.
获取源代码:
首先,从cximage的官方网站或其GitHub存储库下载源代码。

2.
配置交叉编译环境:
根据你要交叉编译的目标平台,确保你的开发环境已安装适当的交叉编译工具链。

例如,如果你正在为ARM 设备交叉编译,你可能需要安装像arm-linux-gnueabihf-gcc这样的工具链。

确保你的系统上安装了必要的依赖库,这些库在目标平台上可能是不可用的。

3.
修改配置:
打开cximage的配置脚本或Makefile文件。

通常,在编译之前需要对配置进行一些修改。

这可能涉及到设置一些标志、路径或库的链接。

4.
编译和安装:
使用交叉编译工具链运行适当的编译命令。

这通常涉及运行类似make或cmake的命令,并指定交叉编译标志。

编译完成后,可能需要安装生成的库和头文件到适当的位置,以便在目标平台上使用。

5.
测试:
在目标平台上测试编译后的cximage以确保它按预期工作。

6.
文档和社区支持:
查阅cximage的官方文档以获取更详细的交叉编译指南。

此外,开源社区论坛和邮件列表也是寻求帮助和解决问题的好地方。

7.
注意事项:
确保遵循任何与目标平台相关的许可要求或限制。

如果你是在商业项目中使用交叉编译的库,请确保你遵循了相关的许可协议。

CxImage的使用方法...

CxImage的使用方法...

CxImage的使用方法...网上有很多关于CxImage的使用方法,其中也给出了下载连链接。

但本人在参照他们的方法一步一步进行,最后总是失败,要么是版本的问题,要么是讲解的太晦涩不清。

唉,有的甚至写一句话不知道要表达什么意思。

比如说,我在某个blog上看到的一句:“//添加CxImage到你的程序中(目录为你上面添加位置,我把它们放在了lib文件夹中了)”说的是啥呀?这里的CxImage是什么?类?文件夹?文件?目录为你上面添加位置?这句话想表达个啥意思啊?目录为位置?狗屁不通!这些blog实在是误导初学者。

下面我把使用的方法用简短扼要的文字讲解一下。

如果还不能明白,可以用csdn站内消息或者邮箱联系笔者本人。

废话少说,下面开始吧。

1. 下载CxImage包/down/5626.html#12. 解压,编译文件夹下的所有dsw文件。

3. 搜索到所有的lib文件,在你的过程目录下新建个文件夹就叫做CxImageLib吧,把搜索到的lib文件copy到CxImageLib文件夹下。

4. 在你的工程文件夹下新建一个文件夹,就叫做CxImageHeadFile吧,把CxImage文件夹下的xfile.h ximadefs.h xiofile.h xmenfile.h 四个文件copy到CxImagefile文件夹里面。

5. 在你的工程的stdafx.h 文件里面添加以下几行:#include "ximage.h"//#pragma comment(lib,"lib/cximagecrtd.lib") //静态链接库时使用#pragma comment(lib,"cximage.lib")#pragma comment(lib,"Jpeg.lib")#pragma comment(lib,"png.lib ")#pragma comment(lib,"zlib.lib ")#pragma comment(lib,"tiff.lib ")#pragma comment(lib,"jasper.lib ")#pragma comment(lib,"j2k.lib ")#pragma comment(lib,"jbig.lib ")6. ok,编译就可用通过了。

c语言image用法

c语言image用法

C语言image用法C语言是一种被广泛应用于系统编程和开发嵌入式软件的高级编程语言。

它提供了强大的图像处理功能,可以通过使用Image库来实现图像的加载、处理和保存。

本文将详细介绍C语言中Image库的用法。

一、Image库概述Image库是C语言中的一个常用工具库,它提供了一组函数和数据结构,用于处理图像数据。

使用Image库可以方便地读取、修改和保存图像,以实现各种图像处理操作。

常见的操作包括图像的缩放、旋转、灰度处理等。

二、图像的加载与保存在使用Image库进行图像处理之前,我们首先需要了解如何加载和保存图像。

Image库支持多种图像格式,包括常见的BMP、PNG、JPEG等。

1. 图像加载Image库提供了一个函数来加载图像数据,该函数的原型如下:IMAGE *imgLoad(const char *filename);该函数接收一个存储图像文件名的字符串作为参数,并返回一个指向图像结构体IMAGE的指针。

通过该指针,我们可以访问图像的宽度、高度和像素数据等信息。

2. 图像保存Image库同样提供了一个函数用于保存图像,函数原型如下:int imgSave(IMAGE *img, const char *filename);该函数接收一个指向IMAGE结构体的指针和一个存储图像文件名的字符串作为参数。

函数会将图像数据保存到指定的文件中,并返回保存是否成功的标志。

三、图像处理操作示例下面我们将通过几个示例演示Image库的图像处理操作。

假设我们有一张名为"image.bmp"的BMP格式图像,我们将使用Image库对该图像进行操作。

1. 图像缩放图像缩放是一种常见的图像处理操作,我们可以使用Image库的函数来实现图像的缩放。

以下是一个图像缩放的示例:#include <stdio.h>#include <image.h>int main() {IMAGE *img = imgLoad("image.bmp"); // 加载图像IMAGE *newImg = imgScale(img, 0.5, 0.5); // 缩小图像imgSave(newImg, "scaled_image.bmp"); // 保存缩放后的图像imgFree(img); // 释放内存imgFree(newImg);return 0;}在上述示例中,我们使用了imgScale函数实现了图像的缩放,该函数接收一个指向原始图像的指针和缩放比例作为参数。

VC++中的图像类型转换--使用开源CxImage类库

VC++中的图像类型转换--使用开源CxImage类库

VC++中的图像类型转换--使用开源CxImage类库转自/hejianhua/archive/2009/02/25/3934704.aspx一、CxImage类库简介这只是翻译了CxImage开源项目主页上的部分简介及简单使用。

CxImage类库是一个优秀的图像操作类库。

它可以快捷地存取、显示、转换各种图像。

有的读者可能说,有那么多优秀的图形库,如OpenIL,FreeImage,PaintLib等等,它们可谓是功能强大,齐全,没必要用其它的类库。

但我要说,这些类库基本上没有免费的,使用这些类库,你要被这样那样的许可协议所束缚。

在这点上,CxImage类库是完全免费的。

另外,在使用上述类库时,你会遇到重重麻烦。

因为它们大部分是平台无关的,且用C语言写成,有的还夹杂着基本的C++ wrapper和成堆德编译选项的声明需要你去处理。

而CxImage类库在这方面做得很好。

还有让我最看好的,就是作者完全公开了源代码。

相对于那些封装好的图形库和GDI+来说,这一点使我们可以进一步学习各种编解码技术,而不再浮于各种技术的表面。

CxImage是一个可以用于MFC的C++类,可以打开,保存,显示,转换各种格式的图像文件,比如BMP, JPEG, GIF, PNG, TIFF, MNG, ICO, PCX, TGA, WMF, WBMP, JBG, J2K 等格式的文件。

可以实现BMP<->JPG,PNG <>TIFF格式等等的转换。

既可以实现图像文件的类型转换,也可以实现在内存图像数据的类型转换,并且使用很方便。

它的作者是: Davide Pizzolato ,主页: http://www.xdp.it/首先,到/bitmap/CXImage.asp下载它的源文件和Demo例子.注: 在Codeproject下载这个类,你得先注册一下,因为这个类可是含金量比较高的,下载量比较大的,当然你也会很高兴成为CodeProject的一名成员的,她不收你的费.授权:LicenseThe class CxImage is free; as for the TIFF, JPEG, PNG and ZLIB libraries : "If you use this source code in a product, acknowledgment is not required but would be appreciated."CxImage is open source and licensed under the zlib license . In a nutshell, this means that you can use the code however you wish, as long as you don't claim it as your own.由于很多人上codeproject的时候,老是上不去,所以,你也可以去这个类库的作者--Davide Pizzolato的主页去下载他的主页还有另外的源代码,有兴趣的也可以看看.二、编译CxImage类库作者已经提供了整个类库配置的工程文件CxImgLib.dsw (VC++6.0),只要打开它进行编译即可。

CC++图形图像处理开源库

CC++图形图像处理开源库

CC++图形图像处理开源库Google三维APIO3DO3D 是⼀个开源的 WebAPI ⽤来在浏览器上创建界⾯丰富的交互式的 3D 应⽤程序。

这是⼀种基于⽹页的可控3D标准。

此格式期望真正的基于浏览器,独⽴于之外,并且⽀持主流的3D显卡,这样就可以在⽹页中实现效果逼真的3D动画。

绘图引擎RRDtoo简单的说,RRDtool (RoundRobin Database Tool)就是⼀个强⼤的绘图的引擎,很多⼯具例如MRTG都可以调⽤rrdtool绘图。

更多RRDtool 信息库OpenCV是Intel开源计算机视觉库。

它由⼀系列 C 函数和少量 C++ 类构成,实现了图像处理和计算机视觉⽅⾯的很多通⽤。

OpenCV 拥有包括 300 多个C函数的跨平台的中、⾼层 API。

它不依赖于其它的外部库——尽管也可以使⽤某些外部库。

Op... 更多OpenCV信息图像处理类库CImgThe CImg Library是⼀个强⼤的图像处理类库。

在代码中使⽤此类可以导⼊/导出,处理,和显⽰图⽚,它是⼀个强⼤的处理图像的C++⼯具箱。

2D图形库AGGAGG,全名:Anti-GrainGeometry,是⼀个开源的、⾼效的2D图形库。

AGG的功能与GDI+的功能⾮常类似,但提供了⽐GDI+更灵活的编程接⼝,其产⽣的图形的质量也⾮常⾼,⽽且它是跨平台的,其宣传可以在⾮常多的操作系统上运⾏。

主要的功能有: 1、⽀持ALPHA、G...更多AGG信息Google图形处理引擎skiaskia是个 2D向量图形处理函数库,包含字型、座标转换,以及点阵图都有⾼效能且简洁的表现。

不仅⽤于Google Chrome浏览器,新兴的开放⼿机平台也采⽤skia作为绘图处理,搭配OpenGL/ES与特定的硬体特征,强化显⽰的效果⾃2005 年Skia被Google收购后。

三维图形渲染引擎OGREOGRE是⼀个三维(3D)图形渲染引擎。

CxImage图像处理类库说明

CxImage图像处理类库说明

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

可以实现BMP<->JPG,PNG <>TIFF 格式等等的互相转换。

CxImage不仅可以实现图像文件的类型转换,还可以实现在内存图像数据的类型转换,并且使用很方便。

除了文件格式的相互转换,它还提供了很多很多图像后处理的功能,比如图像模糊,锐化等等,功能非常强大和实用。

CxImage中的x,大约代表了丰富的图像格式支持和丰富的图像处理功能,可以说CxImage是图像处理的十全大补汤。

用CxImage实现的图像处理程序开发环境:VC6, C++, Windows, MFC, Visual Studio, VS6, Dev简介和许可CxImage是一个可以简便而快速地打开,保存,显示和转换图像文件的C++类库。

CxImage类库是免费的。

对于TIFF,JPEG,PNG和ZLIB,"如果你在你的产品中使用了这些源代码,虽然致谢不是必须的,但是却会得到众人的欣赏。

"CxImage是开源的并在zlib许可下发布。

简单地说,你可以随意地使用这些代码,只要你不说它是你自己的就行了。

文件格式和链接的库CxImage支持如下这些库的最新版本:Zlib (1.2.3), Jasper ( 1.900.1), LibMNG (1.0.10), LibPNG (1.2.24). LibTIFF 3.8.2j2k库(现在被称为openjpeg)和相关的类CxImageJ2K已经从项目中删除。

JPEG2000格式的文件由Jasper和CximageJAS来支持。

Cximage 6.00提供了一个新的类CximageRAW和新的库LibDCR,用于读取来自数码相机的RAW图像。

CxImage图像处理类库说明

CxImage图像处理类库说明

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

可以实现BMP<->JPG,PNG <>TIFF格式等等的互相转换。

CxImage不仅可以实现图像文件的类型转换,还可以实现在内存图像数据的类型转换,并且使用很方便。

除了文件格式的相互转换,它还提供了很多很多图像后处理的功能,比如图像模糊,锐化等等,功能非常强大和实用。

CxImage中的x,大约代表了丰富的图像格式支持和丰富的图像处理功能,可以说CxImage是图像处理的十全大补汤。

用CxImage实现的图像处理程序开发环境:VC6, C , Windows, MFC, Visual Studio, VS6, Dev简介和许可CxImaage是一个可以简便而快速地打开,保存,显示和转换图像文件的C 类库。

CxImage类库是免费的。

对于TIFF,JPEG,PNG和ZLIB,"如果你在你的产品中使用了这些源代码,虽然致谢不是必须的,但是却会得到众人的欣赏。

"CxImage是开源的并在zlib许可下发布。

简单地说,你可以随意地使用这些代码,只要你不说它是你自己的就行了。

文件格式和链接的库CxImage支持如下这些库的最新版本:Zlib (1.2.3), Jasper ( 1.900.1), LibMNG (1.0.10), LibPNG (1.2.24). LibTIFF 3.8.2j2k库(现在被称为openjpeg)和相关的类CxImageJ2K已经从项目中删除。

JPEG2000格式的文件由Jasper和CximageJAS来支持。

Cximage 6.00提供了一个新的类CximageRAW和新的库LibDCR,用于读取来自数码相机的RAW图像。

10.CxImage库和扩展TinyCAD图像支持

10.CxImage库和扩展TinyCAD图像支持

目前TinyCAD中添加的CxImage应用只 是基础应用 在更多的情况下,可以使用CxImage的扩 展功能实现图片画刷填充闭合图形 使用CxImage滤镜的功能实现复杂的图 像处理功能 详细的功能细节可以参考CxImage自带 的Demo工程

去http://www.xdp.it/download.htm网站 下载最新的CxImage库 解压后添加其解决方案文件进 TinyCAD中 删除不需要的项目 修改CxImageMFCDll项目的属性设置合 适的输出目录 为CxImageMfcDll项目添加项目依赖 为TinyCAD添加项目依赖
为TinyCAD系统添加 CTinyCADShapeImage类从 CTinyCADShapeBase派生 添加CxImage成员对象 重载和实现基类的主要方法 在CTinyCADDrawImage中扩展Image命 令 运行TinyCAD,输入Draw.Image命令查 看效果
广义来讲光栅图形可以作为矢量图形 的一个子图元 矢量图形的填充等处理需要光栅图的 支持 目前流行的CAD系统都具有处理光栅 图的功能 光栅图处理已经逐步成为一些其它图 形软件的重要辅助功能
包含头文件ximage.h 声明CxImage的对象 调用Load 或 直接利用构造函数载入图片文 件 利用IsValid判定对象是否正常,即判定图片 文件是否加载成功 利用Draw2绘制图像到指定的位置 利用其它变换函数对图像进行必要的变换 (旋转 缩放 镜像 滤镜等等) 利用Decode和Encode来进行转存或加载
CxImage库介绍和相关资源 为TinyCAD项目添加CxImage库支持 实现关于CxImage的新图形命令函数
CxImage类库是一个优秀的图像操作类 库 可以快捷地存取、显示、转换各种图 像 CxImage类库是完全免费的 其源代码是公开的 可以方便的集成到VS环境中与MFC可 以方便集成

使用CxImage实现图像格式转换(word文档良心出品)

使用CxImage实现图像格式转换(word文档良心出品)

使用CxImage实现图像格式转换●引言目前CxImage支持的图像格式包括:bmp、gif、jpg、png、ico、tif、tga、pcx、wbmp、wmf、jp2、jpc、pgx、pnm、ras、jbg、mng、ska、raw和psd;CxImage中所包含的图像操作可通过打开index.htm来查看;●下载与解压1.从/projects/cximage/下载最新的cximage702_full源码,并解压到文件夹cximage702_full中;●编译cximage702_full2.以管理员身份打开cximage702_full文件夹下的CxImageFull_vc10.sln工程,便可看到解决方案中的14个项目:注:vs2010设置以管理员身份启动的方法:(右击快捷键,选择以管理员身份启动即可)a. 找到VS2010的快捷方式:右击打开文件位置b. 找到VS2010的启动项目devenv.exe :右击属性兼容性特权等级,以管理员权限运行;如果需要每个用户都以管理员权限运行,还可以更改所有用户的设置特权等级,以管理员权限运行。

c. 然后在项目的打开方式中确保以VS2010为默认打开程序就好了。

其中cximagecrtdll, cxiamgemfcdll 是用以支持动态链接库的方式加入所需的项目,如果不需要动态链接,则不需要编译运行;demo 和demodll 是示例的两个项目,其实是一个项目的不同的外部链接输入配置,前者使用静态链接,后者使用动态链接。

动态链接和静态链接项目所需的库除了头文件外是完全不一样的。

3.在编译之前先将每个工程属性的Character Set由原先的Use Unicode Character Set改为Use Multi-ByteCharacter Set(否则,在使用该库时,会出现类似:error C2664: 'CxImage::Save' : cannot convert parameter 1 from 'const char *' to 'const TCHAR *'的错误)。

C++中图像处理的类之一CxImage

C++中图像处理的类之一CxImage

C++中图像处理的类之⼀CxImageCxImage 是⼀个C++类,可以加载、保存、显⽰,转换BMP, JPEG, GIF, PNG, TIFF, MNG, ICO, PCX, TGA, WMF, WBMP, JBG, J2K 等格式图像。

Cximage以位图为基础,并附加⼀些信息保存信息。

Code:class CxImage{...protected:void* pDib; //contains the header, the palette, the pixelsBITMAPINFOHEADER head; //standard headerCXIMAGEINFO info; //extended informationBYTE* pSelection; //selected regionBYTE* pAlpha; //alpha channelCxImage** pLayers; //generic layers}CxImage::head 是⼀个位图头,CxImage::pDib 是通常的位图。

CxImage::info 是⼀个存储在不同格式之间的许多共享信息。

Code:typedef struct tagCxImageInfo {DWORD dwEffWidth; //DWORD aligned scan line widthBYTE* pImage; //THE IMAGE BITSvoid* pGhost; //if this is a ghost, pGhost point to the bodyDWORD dwType; //original image formatchar szLastError[256]; //debugginglong nProgress; //monitorlong nEscape; //escapelong nBkgndIndex; //used for GIF, PNG, MNGRGBQUAD nBkgndColor; //used for RGB transparencyBYTE nQuality; //used for JPEGlong nFrame; //used for TIF, GIF, MNG : actual framelong nNumFrames; //used for TIF, GIF, MNG : total number of//framesDWORD dwFrameDelay; //used for GIF, MNGlong xDPI; //horizontal resolutionlong yDPI; //vertical resolutionRECT rSelectionBox; //bounding rectangleBYTE nAlphaMax; //max opacity (fade)bool bAlphaPaletteEnabled; //true if alpha values in the palette are// enabled.bool bEnabled; //enables the painting functionslong xOffset;long yOffset;DWORD dwEncodeOption; //for GIF, TIF : 0=def.1=unc,2=fax3,3=fax4,// 4=pack,5=jpgRGBQUAD last_c; //for GetNearestIndex optimizationBYTE last_c_index;bool last_c_isvalid;long nNumLayers;DWORD dwFlags;} CXIMAGEINFO;CxImage对象还是多层的集合。

VC中的CImage类(转)

VC中的CImage类(转)
{
switch (dlg.m_ofn.nFilterIndex)
{
case 1:
strExtension = "bmp"; break;
case 2:
strExtension = "jpg"; break;
case 3:
strExtension = "gif"; break;
MessageBox("GetExporterFilter调用失败!");
return;
}
CFileDialog dlg(TRUE, NULL, NULL, OFN_FILEMUSTEXIST, strFilter);
if(IDOK != dlg.DoModal())
return;
HRESULT hResult;
// 获取CImage支持的图像文件的过滤字符串
hResult = m_Image.GetExporterFilterString(strFilter,aguidFileTypes,
_T( "All Image Files") );
if (FAILED(hResult)) {
HBITMAP hBitmap=image.Detach();
CBitmap bmp;
bmp.Attach(hBitmap);
这样一来,就又回归到以前操纵CBitmap的方式了.CImage本身封装了DIB(设备无关位图)的功能,因而能够处理每个位图像素。
它具有下列最酷特性:
1、AlphaBlend支持像素级的颜色混合,从而实现透明和半透明的效果。
(6) 编译并运行。单击"打开"工具按钮,在弹出的对话框中指定一个图像文件后,单击"打开"按钮,其结果如图7.21所示。

VC_CImage

VC_CImage

VC CImage类Visual C++的CBitmap类和静态图片控件的功能是比较弱的,它只能显示出在资源中的图标、位图、光标以及图元文件的内容,而不像VB中的Image控件可以显示出绝大多数的外部图像文件(BMP、GIF、JPEG等)。

因此,想要在对话框或其他窗口中显示外部图像文件则只能借助于第三方提供的控件或代码。

现在,MFC和ATL共享的新类CImage为图像处理提供了许多相应的方法,这使得Visual C++在图像方面的缺憾一去不复返了。

CImage类概述CImage是MFC和A TL共享的新类,它能从外部磁盘中调入一个JPEG、GIF、BMP和PNG 格式的图像文件加以显示,而且这些文件格式可以相互转换。

由于CImage在不同的Windows 操作系统中其某些性能是不一样的,因此在使用时要特别注意。

例如,CImage::PlgBlt和CImage::MaskBlt只能在Windows NT 4.0 或更高版本中使用,但不能运行在Windows 95/98 应用程序中。

CImage::AlphaBlend和CImage::TransparentBlt也只能在Windows 2000/98或其更高版本中使用。

即使在Windows 2000运行程序还必须将stdafx.h文件中的WINVER和_WIN32_WINNT的预定义修改成0x0500才能正常使用。

CImage封装了DIB(设备无关位图)的功能,因而可以让我们能够处理每个位图像素。

它具有下列最酷特性:1、AlphaBlend支持像素级的颜色混合,从而实现透明和半透明的效果。

2、PlgBlt能使一个矩形区域的位图映射到一个平行四边形区域中,而且还可能使用位屏蔽操作。

3、TransparentBlt在目标区域中产生透明图像,SetTransparentColor用来设置某种颜色是透明色。

4、MaskBlt在目标区域中产生源位图与屏蔽位图合成的效果。

C++图片格式转化和压缩

C++图片格式转化和压缩

C++图⽚格式转化和压缩在做⼈脸识别底库图⽚导⼊的时候,需要⽀持主流的图⽚的格式,如jpeg、bmp、png等格式。

所以需要对图⽚进⾏格式转化。

图⽚过⼤的话,还有进⾏缩放等。

本⽂介绍的是利⽤cximage开源库,来进⾏对图⽚进⾏格式转化和压缩。

使⽤cximage库的好处是⽀持各种平台,如windows、linux系统上都可以使⽤。

1、⾸先从开源⽹站上下载cximage库。

⼀般下载下来的cximage库⽀持⼤部分的图⽚格式,可以根据项⽬要求,进⾏裁剪,⽐如⽀持jpeg、bmp和png三种格式的话,可以裁剪到很多库。

修改的头⽂件:ximacfg.h,不需要⽀持的图⽚格式,可以直接改成02、本次⽤到的函数介绍:1)、bool Load(const TCHAR* filename, DWORD imagetype=0);CxImage(const TCHAR * filename, DWORD imagetype);可以直接传⼊⼀个路径,直接加载2)CxImage(BYTE * buffer, DWORD size, DWORD imagetype);也可以通过上⾯的构造函数,直接传⼊图⽚的内存数据和⼤⼩3)bool IsValid() const;检查图⽚是否正确初始化4)bool Resample(long newx, long newy, int mode = 1, CxImage* iDst = NULL);⾃定义图⽚⼤⼩(缩放)3、下⾯的⼀段代码是把bmp、png格式的图⽚转成jpeg格式,如果图⽚过⼤,并进⾏缩放。

※ cximage转化后的jpeg格式是420采样的。

1// 图⽚压缩和格式转化2int CompressPicure(char * inData, int inSize, char * outData, int & outSize)3 {4int picType = getPictureType((unsigned char *)inData, inSize);5int iTmpOutSize = 0;6if (picType == -1)7 {8 printf("picType is not valid.\n");9return -1;10 }11 CxImage image((BYTE *)inData, inSize, picType);12if (!image.IsValid())13 {14 printf("image is not valid.\n");15return -1;16 }1718if (image.GetWidth() > 400 || image.GetHeight() > 300)19 {20//缩放⼀下21int rewith = (image.GetWidth() > 400 ? 400 : image.GetWidth());22int height = (image.GetHeight() > 300 ? 300 : image.GetHeight());23 image.Resample(rewith, height, 1);24 }2526 image.SetJpegQuality(JPEG_QUALITY_DEFAULT);2728 CxMemFile memfile;29 memfile.Open();30 image.Encode(&memfile, CXIMAGE_FORMAT_JPG);31 BYTE *pImageBuf = memfile.GetBuffer();32 iTmpOutSize = memfile.Size();33if (iTmpOutSize <= outSize)34 {35 outSize = iTmpOutSize;36 memcpy(outData, pImageBuf, outSize);37 }38else39 {40 outSize = 0;41 }42 image.FreeMemory(pImageBuf);43 memfile.Close();44return0;45 }获取图⽚格式,只⽀持png、bmp和jpeg。

CXImage使用说明

CXImage使用说明

一。

CxImage类库简介这只是翻译了CxImage开源项目主页上的部分简介及简单使用。

CxImage类库是一个优秀的图像操作类库。

它可以快捷地存取、显示、转换各种图像。

有的读者可能说,有那么多优秀的图形库,如OpenIL,FreeImage, PaintLib等等,它们可谓是功能强大,齐全,没必要用其它的类库。

但我要说,这些类库基本上没有免费的,使用这些类库,你要被这样那样的许可协议所束缚。

在这点上,CxImage类库是完全免费的。

另外,在使用上述类库时,你会遇到重重麻烦。

因为它们大部分是平台无关的,且用C语言写成,有的还夹杂着基本的C++ wrapper和成堆德编译选项的声明需要你去处理。

而CxImage类库在这方面做得很好。

还有让我最看好的,就是作者完全公开了源代码。

相对于那些封装好的图形库和GDI+来说,这一点使我们可以进一步学习各种编解码技术,而不再浮于各种技术的表面。

CxImage是一个可以用于MFC 的C++类,可以打开,保存,显示,转换各种格式的图像文件,比如BMP, JPEG, GIF, PNG, TIFF, MNG, ICO, PCX, TGA, WMF, WBMP, JBG, J2K 等格式的文件。

可以实现BMP<->JPG,PNG <>TIFF格式等等的转换。

既可以实现图像文件的类型转换,也可以实现在内存图像数据的类型转换,并且使用很方便。

它的作者是: Davide Pizzolato ,主页: http://www.xdp.it/首先,到/bitmap/CXImage.asp 下载它的源文件和Demo例子.注: 在Codeproject下载这个类,你得先注册一下,因为这个类可是含金量比较高的,下载量比较大的,当然你也会很高兴成为CodeProject的一名成员的,她不收你的费.授权:LicenseThe class CxImage is free; as for the TIFF, JPEG, PNG and ZLIB libraries : "If you use this source code in a product, acknowledgment is not required but would be appreciated."CxImage is open source and licensed under the zlib license . In a nutshell, this means that you can use the code however you wish, as long as you don't claim it as your own.由于很多人上codeproject的时候,老是上不去,所以,你也可以去这个类库的作者--Davide Pizzolato的主页去下载他的主页还有另外的源代码,有兴趣的也可以看看.二。

使用CxImage实现图像格式转换(word文档良心出品)

使用CxImage实现图像格式转换(word文档良心出品)

使用CxImage实现图像格式转换●引言目前CxImage支持的图像格式包括:bmp、gif、jpg、png、ico、tif、tga、pcx、wbmp、wmf、jp2、jpc、pgx、pnm、ras、jbg、mng、ska、raw和psd;CxImage中所包含的图像操作可通过打开index.htm来查看;●下载与解压1.从/projects/cximage/下载最新的cximage702_full源码,并解压到文件夹cximage702_full中;●编译cximage702_full2.以管理员身份打开cximage702_full文件夹下的CxImageFull_vc10.sln工程,便可看到解决方案中的14个项目:注:vs2010设置以管理员身份启动的方法:(右击快捷键,选择以管理员身份启动即可)a. 找到VS2010的快捷方式:右击打开文件位置b. 找到VS2010的启动项目devenv.exe :右击属性兼容性特权等级,以管理员权限运行;如果需要每个用户都以管理员权限运行,还可以更改所有用户的设置特权等级,以管理员权限运行。

c. 然后在项目的打开方式中确保以VS2010为默认打开程序就好了。

其中cximagecrtdll, cxiamgemfcdll 是用以支持动态链接库的方式加入所需的项目,如果不需要动态链接,则不需要编译运行;demo 和demodll 是示例的两个项目,其实是一个项目的不同的外部链接输入配置,前者使用静态链接,后者使用动态链接。

动态链接和静态链接项目所需的库除了头文件外是完全不一样的。

3.在编译之前先将每个工程属性的Character Set由原先的Use Unicode Character Set改为Use Multi-ByteCharacter Set(否则,在使用该库时,会出现类似:error C2664: 'CxImage::Save' : cannot convert parameter 1 from 'const char *' to 'const TCHAR *'的错误)。

CXimage使用

CXimage使用

www.xdp.it官网上下载。

CXimage600下载了用VC++6.0编译的对下载到得源代码设置cximage的编译方式,有4种选项:debug,release, unicode-debug,unicode-release,在批组建(batch build)中选择自己所需要的编译结果,得到对应的lib文件。

默认的编译模式1. 从CxImage工程中复制下列文件到工程目录:xfile.h、ximacfg.h、ximadef.h、ximage.h、xiofile.h、xmemfile.h2. 从CxImage工程中复制下列文件到工程目录lib文件夹下:png.lib、jpeg.lib、zlib.lib、tiff.lib、jasper.lib、cximage.lib在自己的工程中添加如下的代码:添加头文件和lib#include "ximage.h"#pragma comment(lib, "cximage.lib")#pragma comment(lib, "cximageu.lib")#pragma comment(lib, "jasper.lib")#pragma comment(lib, "jbig.lib")#pragma comment(lib, "Jpeg.lib")#pragma comment(lib, "libdcr.lib")#pragma comment(lib, "mng.lib")#pragma comment(lib, "png.lib")#pragma comment(lib, "Tiff.lib")#pragma comment(lib, "zlib.lib")工程设置如下:__MBCS修改成_UNICODE,UNICODE或者是:做以上修改就可以使用了。

Cimage类处理图像像素(数据)的3种方式(转)

Cimage类处理图像像素(数据)的3种方式(转)

Cimage类处理图像像素(数据)的3种⽅式(转)这⾥只讨论对图像像素的处理,cimage类的具体⽤法查相关资料#include <atlimage.h> //VS2010以后不⽤加这个……………………CImage m_Image; //或CImage* m_Image; 下⾯例⼦程序我⽤的CImage m_Image; 只是⼀个⽤成员选择符,⼀个⽤指针操作,效率上可能有所差异下⾯是3种⽅法:⼀、⽤Cimage类的成员函数进⾏处理这⾥假设你已经加载了图像位图,并与CImage对象m_Image相关联。

相关成员函数主要有:GetPixel 返回像素颜⾊SetPixel 设置像素颜⾊如:m_Image.SetPixel( i-1, j-1, RGB(rr,gg,bb));SetPixelRGB 设置像素的红绿蓝如:m_Image.SetPixelRGB(x,y,avg,avg,avg);SetColorTable 设置调⾊板颜⾊分量(红、绿、蓝)值GetWidth 宽度(以像素为单位)GetHeight ⾼度1、程序⽰例1)⼀个双线性插值放⼤程序。

[cpp]1. if (m_Image.IsNull())2. return;3. // 创建对话框4. DlgInterpolation TranPara;5. //显⽰对话框,提⽰⽤户设定量6. if (TranPara.DoModal() != IDOK)7. return;8. int k=TranPara.m_inter;9. BeginWaitCursor();10. CImage m_Image1;11. if (! m_Image1.IsNull())12. {13. m_Image1.Destroy();14. }15. m_Image1.Create( m_Image.GetWidth()*k, m_Image.GetHeight()*k, 24,0);16. // 四个最临近象素的坐标17. int x1, x2;18. int y1, y2;19. // 四个最临近象素值20. unsigned char f1, f2, f3, f4;21. // ⼆个插值中间值22. unsigned char f12, f34;23. //计算结果24. int fr,fb,fg;25. double epsilon = 0.001;26. COLORREF pixel11,pixel12,pixel21,pixel22;27. int nHeight1 = m_Image1.GetHeight();28. int nWidth1 = m_Image1.GetWidth();29. int nHeight = m_Image.GetHeight();30. int nWidth = m_Image.GetWidth();31. double m=((double)nWidth1-1)/((double)nWidth-1);32. for (int i=0; i<nWidth1; i++)33. {34. for (int j=0; j<nHeight1; j++)35. {36. double x=double((double)i/m);37. double y=double((double)j/m);38. //计算四个最临近象素的坐标,+1向右下⽅移动39. x1 = (int) x;40. x2 = x1 + 1;41. y1 = (int) y;42. y2 = y1 + 1;43. if( (x < 0) || (x > nWidth - 1) || (y < 0) || (y > nHeight - 1))44. {45. //要计算的点不在源图范围内,返回-146. continue;47. }48. else49. {50. if (fabs(x - nWidth + 1) <= epsilon )51. {52. // 要计算的点在图像右边缘上53. if (fabs(y -nHeight + 1) <= epsilon)54. {55. // 要计算的点正好是图像最右下⾓那⼀个象素,直接返回该点象素值56. pixel11 = m_Image.GetPixel(x1,y1);57. f1 = (unsigned char)GetRValue(pixel11);58. fr=(int)f1;59. f1 = (unsigned char)GetGValue(pixel11);60. fg=(int)f1;61. f1 = (unsigned char)GetBValue(pixel11);62. fb=(int)f1;63. }64. else65. {66. // 在图像右边缘上且不是最后⼀点,直接⼀次插值即可67. pixel11 = m_Image.GetPixel(x1,y1);68. pixel12 = m_Image.GetPixel(x1,y2);69. f1 = (unsigned char)GetRValue(pixel11);70. f3 = (unsigned char)GetRValue(pixel12);71. fr= (int) (f1 + (y -y1) * (f3 - f1));72. f1 = (unsigned char)GetGValue(pixel11);73. f3 = (unsigned char)GetGValue(pixel12);74. fg= (int) (f1 + (y -y1) * (f3 - f1));75. f1 = (unsigned char)GetBValue(pixel11);76. f3 = (unsigned char)GetBValue(pixel12);77. fb= (int) (f1 + (y -y1) * (f3 - f1));78. }79. }80. else if (fabs(y - nHeight + 1) <= epsilon)81. {82. // 要计算的点在图像下边缘上且不是最后⼀点,直接⼀次插值即可83. pixel11 = m_Image.GetPixel(x1,y1);84. pixel21 = m_Image.GetPixel(x2,y1);85. f1 = (unsigned char)GetRValue(pixel11);86. f2 = (unsigned char)GetRValue(pixel21);87. fr=(int) (f1 + (x -x1) * (f2 - f1));88. f1 = (unsigned char)GetGValue(pixel11);89. f2 = (unsigned char)GetGValue(pixel21);90. fg=(int) (f1 + (x -x1) * (f2 - f1));91. f1 = (unsigned char)GetBValue(pixel11);92. f2 = (unsigned char)GetBValue(pixel21);93. fb=(int) (f1 + (x -x1) * (f2 - f1));94. }95. else96. {97. pixel11 = m_Image.GetPixel(x1,y1);98. pixel12 = m_Image.GetPixel(x1,y2);99. pixel21 = m_Image.GetPixel(x2,y1);100. pixel22 = m_Image.GetPixel(x2,y2);101. // 计算四个最临近象素值102. f1 = (unsigned char)GetRValue(pixel11);103. f2 = (unsigned char)GetRValue(pixel21);104. f3 = (unsigned char)GetRValue(pixel12);105. f4 = (unsigned char)GetRValue(pixel22);106. f12 = (unsigned char) (f1 + (x - x1) * (f2 - f1));107. f34 = (unsigned char) (f3 + (x - x1) * (f4 - f3));108. fr= (int) (f12 + (y -y1) * (f34 - f12));109. f1 = (unsigned char)GetGValue(pixel11);110. f2 = (unsigned char)GetGValue(pixel21);111. f3 = (unsigned char)GetGValue(pixel12);112. f4 = (unsigned char)GetGValue(pixel22);113. f12 = (unsigned char) (f1 + (x - x1) * (f2 - f1));114. f34 = (unsigned char) (f3 + (x - x1) * (f4 - f3));115. fg= (int) (f12 + (y -y1) * (f34 - f12));116. f1 = (unsigned char)GetBValue(pixel11);117. f2 = (unsigned char)GetBValue(pixel21);118. f3 = (unsigned char)GetBValue(pixel12);119. f4 = (unsigned char)GetBValue(pixel22);120. f12 = (unsigned char) (f1 + (x - x1) * (f2 - f1));121. f34 = (unsigned char) (f3 + (x - x1) * (f4 - f3));122. fb= (int) (f12 + (y -y1) * (f34 - f12));123. }124. }125. m_Image1.SetPixel(i,j, RGB(fr,fg,fb));126. }127. }128. m_Image.Destroy();129. m_Image.Create( m_Image1.GetWidth(), m_Image1.GetHeight(), 24, 0);130. COLORREF pixel;131. for (int i=0; i<nWidth1; i++)132. {133. for (int j=0; j<nHeight1; j++)134. {135. pixel = m_Image1.GetPixel(i,j);136. int y=GetRValue(pixel);137. int p=GetGValue(pixel);138. int b=GetBValue(pixel);139. m_Image.SetPixelRGB(i,j,GetRValue(pixel),GetGValue(pixel),GetBValue(pixel));140. }141. }142. m_Image1.Destroy();143. Invalidate();144. EndWaitCursor();2)处理视频帧[cpp]1. ……2. Defog(imageprosses, nimgWidth, nimgheigt);/*我加的⼀个雾天图像增强的动态库,imageprosses是视频的⼀帧,输⼊imageprosses处理,并输出imageprosses*/3. int rr = 0, gg = 0, bb = 0;4. for (int i = 0; i < nimgWidth; i++)5. {6. for (int j = 1; j <= nimgheigt; j++)7. {8. bb=(int)imageprosses[3*i*j];9. gg=(int)imageprosses[3*i*j+1];10. rr=(int)imageprosses[3*i*j+2];11. m_Image.SetPixel(i, j-1, RGB(rr,gg,bb));/*设置⼀帧图像的像素值⽤来显⽰*/12. }13. }14. ……2、⽐较:⾮常慢。

VC图像库及图像加载方法

VC图像库及图像加载方法

VC++几种图像库及图像加载方法一、使用CImage类加载用CImage类的Load函数加载图片,之后用Detach()取得HBITMAP句柄,取得图片的HBITMAP句柄后就可以像操作BMP图片一样处理JPG/JPEG/GIF/PNG CImage img;HRESULT ret=image.Load(filename);//filenam 是要加载的文件名路径HBITMAP bitmap=img.Detach()//像操作BMP图片一样处理图片CString str_Photo = theApp.m_UserPhoto ;if ((str_Photo.Right(3)==_T("bmp"))||(str_Photo.Right(3)==_T("BMP"))){CDC *pDC = m_Picture.GetDC();CRect m_Rect;m_Picture.GetClientRect(&m_Rect);CDC dc;dc.CreateCompatibleDC(pDC);//CreateCompatibleDCHBITMAP hBitmap;hBitmap = (HBITMAP)LoadImage(NULL,str_Photo,IMAGE_BITMAP,0,0,LR_DEFAULTSIZE |LR_LOADFROMFILE);CBitmap m_Bitmap;m_Bitmap.Attach(hBitmap);//loadBitmap;dc.SelectObject(&m_Bitmap);BITMAP bmp;m_Bitmap.GetBitmap(&bmp);pDC->StretchBlt(m_Rect.left,m_Rect.top,m_Rect.Width() ,m_Rect.Height(),&dc,0,0, bmp.bmWidth,bmp.bmHeight,SRCCOPY);dc.DeleteDC();}else if ((str_Photo.Right(3)==_T("jpg"))||(str_Photo.Right(3)==_T("JPG"))){IStream *m_pStream;//定义流对象IPicture *m_pPicture;//定义接口对象OLE_XSIZE_HIMETRIC m_JpgWidth; //jpg widthOLE_XSIZE_HIMETRIC m_JpgHeight;//jpg heightHGLOBAL hMem; //定义堆句柄CFile m_File;m_File.Open(str_Photo,CFile::modeReadWrite); ///读文件ULONGLONG filesize = m_File.GetLength();///get file lengthhMem = GlobalAlloc(GMEM_MOVEABLE,filesize);///alloc meomeryLPVOID pData = NULL;pData = GlobalLock(hMem); //lock the meomry areym_File.Read(pData,filesize);///read file to the meomerym_File.Close();GlobalUnlock(hMem);CreateStreamOnHGlobal(hMem,TRUE,&m_pStream);OleLoadPicture(m_pStream,filesize,TRUE,IID_IPicture,(LPVOID*)&m_pPicture);m_pPicture->get_Width(&m_JpgWidth);m_pPicture->get_Height(&m_JpgHeight);CDC *pDC = m_Picture.GetDC();CDC dc;dc.CreateCompatibleDC(pDC);CRect rect;m_Picture.GetClientRect(&rect);m_pPicture->Render(pDC->m_hDC,rect.left,rect.top,rect.Width(),rect.Height(),0,m_J pgHeight,m_JpgWidth,-m_JpgHeight,NULL);GlobalFree(hMem);DeleteDC(dc);}这是读取图片路径读取BMP或JPG图像,并显示。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

VC++中的图像类型转换--使用开源CxImage类库转自/hejianhua/archive/2009/02/25/3934704.aspx一、CxImage类库简介这只是翻译了CxImage开源项目主页上的部分简介及简单使用。

CxImage类库是一个优秀的图像操作类库。

它可以快捷地存取、显示、转换各种图像。

有的读者可能说,有那么多优秀的图形库,如OpenIL,FreeImage,PaintLib等等,它们可谓是功能强大,齐全,没必要用其它的类库。

但我要说,这些类库基本上没有免费的,使用这些类库,你要被这样那样的许可协议所束缚。

在这点上,CxImage类库是完全免费的。

另外,在使用上述类库时,你会遇到重重麻烦。

因为它们大部分是平台无关的,且用C语言写成,有的还夹杂着基本的C++ wrapper和成堆德编译选项的声明需要你去处理。

而CxImage类库在这方面做得很好。

还有让我最看好的,就是作者完全公开了源代码。

相对于那些封装好的图形库和GDI+来说,这一点使我们可以进一步学习各种编解码技术,而不再浮于各种技术的表面。

CxImage是一个可以用于MFC的C++类,可以打开,保存,显示,转换各种格式的图像文件,比如BMP, JPEG, GIF, PNG, TIFF, MNG, ICO, PCX, TGA, WMF, WBMP, JBG, J2K 等格式的文件。

可以实现BMP<->JPG,PNG <>TIFF格式等等的转换。

既可以实现图像文件的类型转换,也可以实现在内存图像数据的类型转换,并且使用很方便。

它的作者是: Davide Pizzolato ,主页: http://www.xdp.it/首先,到/bitmap/CXImage.asp下载它的源文件和Demo例子.注: 在Codeproject下载这个类,你得先注册一下,因为这个类可是含金量比较高的,下载量比较大的,当然你也会很高兴成为CodeProject的一名成员的,她不收你的费.授权:LicenseThe class CxImage is free; as for the TIFF, JPEG, PNG and ZLIB libraries : "If you use this source code in a product, acknowledgment is not required but would be appreciated."CxImage is open source and licensed under the zlib license . In a nutshell, this means that you can use the code however you wish, as long as you don't claim it as your own.由于很多人上codeproject的时候,老是上不去,所以,你也可以去这个类库的作者--Davide Pizzolato的主页去下载他的主页还有另外的源代码,有兴趣的也可以看看.二、编译CxImage类库作者已经提供了整个类库配置的工程文件CxImgLib.dsw (VC++6.0),只要打开它进行编译即可。

需要大家注意的是:整个CxImage类库非常大。

如果你只需要能处理其中的几种格式,编译该类库时,你可以在配置的头文件ximcfg.h中找到一些编译开关选项来关闭一些图像库。

JPG、PNG、TIFF中的每一个库,都会向最终程序增加约100KB的内容。

而CxImage类库压缩后只有约60KB。

所以,你需要谨慎挑选一些你真正需要的类库。

//类库配置文件:ximacfg.h#define CXIMAGE_SUPPORT_JPG 1//如果要实现bmp->jpg 则必须打开#define CXIMAGE_SUPPORT_BMP 1#define CXIMAGE_SUPPORT_GIF 1#define CXIMAGE_SUPPORT_JPG 1//以上为必须打开,下面的随便............#define CXIMAGE_SUPPORT_PNG 0//不使用它#define CXIMAGE_SUPPORT_MNG 0#define CXIMAGE_SUPPORT_ICO 1#define CXIMAGE_SUPPORT_TIF 0//#define CXIMAGE_SUPPORT_TGA 0//#define CXIMAGE_SUPPORT_PCX 0//#define CXIMAGE_SUPPORT_WBMP 0//#define CXIMAGE_SUPPORT_WMF 0//#define CXIMAGE_SUPPORT_J2K 0 // Beta, use JP2#define CXIMAGE_SUPPORT_JBG 0//.............各工程的作用对应如下:∙ CxImage : cximage.lib - static library∙ CxImageCrtDll : cximagecrt.dll - DLL not using mfc∙ CxImageMfcDll : cximage.dll - DLL using mfc∙Demo : demo.exe - program linked with cximage.lib and the C libraries ∙DemoDll : demodll.exe - program linked with cximagecrt.dll∙ j2k,jasper,jbig,jpeg,png,tiff,zlib : static C libraries编译这些工程需要耗费几分钟的时间(中间文件可达60MB)。

三、在程序中应用CxImage类库进行图像类型转换在你的VC工程中使用这个类库,要对工程进行如下设置(Project Settings):|- C/C++| |- Code Generation| | |- Use run-time library : Multithreaded DLL (must be the same for | | | all the linked libraries) //应该只要是多线程DLL即可,DEBUG的也行| | |- Struct member alignment : must be the same for all the linked libraries| |- Precompiled headers : not using precompiled headers| |- Preprocessor| |- Additional Include Directories: ..\cximage(该处填CxImage里的.h 和.cpp文件拷贝并导入工程后所在的文件夹,填写后在工程中include时编译器会查找该文件夹,故include的文件无需路径)|- Link|- General|- Object/library modules: png.libjpeg.libzlib.libtiff.libjasper.libcximage.lib (把需要的lib文件从CxImage中拷贝到工程中的lib文件所在的目录)并且从CxImage中将xfile.h、ximacfg.h、ximadef.h、ximage.cpp、ximage.h、xiofile.h、xmemfile.cpp、xmemfile.h拷贝到工程文件夹下并将CxImage.h文件加入工程中即可。

也可以设置vc6的"tools"中的"include"路径.下面介绍应用它进行图像类型转换的方式:1.从一种图像文件类型转换为另一种文件类型(convert from a format to another) CxImage image; // 定义一个CxImage对象// 从bmp文件转换为jpg文件(bmp -> jpg)image.Load("image.bmp", CXIMAGE_FORMAT_BMP); //先装载bmp文件,需要指定文件类型// 判断加载的bmp文件是否存在。

if (image.IsValid())...{// Returns true if the image has 256 colors and a linear grey scale palette.if(!image.IsGrayScale()) image.IncreaseBpp(24); // param nbit: 4, 8, 24image.SetJpegQuality(99); // 设置图像的压缩质量参数(从0到1 00,数值越大,质量越高)image.Save("image.jpg",CXIMAGE_FORMAT_JPG); // 把压缩后的图像以jpg文件类型保存起来。

}// 从png文件转换为tif文件(png -> tif)image.Load("image.png", CXIMAGE_FORMAT_PNG);if (image.IsValid()){image.Save("image.tif",CXIMAGE_FORMAT_TIF);}2。

加载程序资源图像(load an image resource)即从程序的资源图像中构建CxImage对象,有如下几种方式:// Load the resource IDR_PNG1 from the PNG resource typeCxImage* newImage = new CxImage();newImage->LoadResource(FindResource(NULL,MAKEINTRESOURCE(IDR _PNG1),"PNG"),CXIMAGE_FORMAT_PNG);或者//Load the resource IDR_JPG1 from DLLCxImage* 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);3。

相关文档
最新文档