VC++中的图像类型转换--使用开源CxImage类库
- 格式:doc
- 大小:179.00 KB
- 文档页数:8
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,你需要遵循几个步骤。
下面是一个基本的指南:
1.
获取源代码:
首先,从cximage的官方网站或其GitHub存储库下载源代码。
2.
配置交叉编译环境:
根据你要交叉编译的目标平台,确保你的开发环境已安装适当的交叉编译工具链。
例如,如果你正在为ARM 设备交叉编译,你可能需要安装像arm-linux-gnueabihf-gcc这样的工具链。
确保你的系统上安装了必要的依赖库,这些库在目标平台上可能是不可用的。
3.
修改配置:
打开cximage的配置脚本或Makefile文件。
通常,在编译之前需要对配置进行一些修改。
这可能涉及到设置一些标志、路径或库的链接。
4.
编译和安装:
使用交叉编译工具链运行适当的编译命令。
这通常涉及运行类似make或cmake的命令,并指定交叉编译标志。
编译完成后,可能需要安装生成的库和头文件到适当的位置,以便在目标平台上使用。
5.
测试:
在目标平台上测试编译后的cximage以确保它按预期工作。
6.
文档和社区支持:
查阅cximage的官方文档以获取更详细的交叉编译指南。
此外,开源社区论坛和邮件列表也是寻求帮助和解决问题的好地方。
7.
注意事项:
确保遵循任何与目标平台相关的许可要求或限制。
如果你是在商业项目中使用交叉编译的库,请确保你遵循了相关的许可协议。
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库的用法。
一、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类库转自/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++图形图像处理开源库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是一个可以用于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是一个可以用于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图像。
使用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 *'的错误)。
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。