转自:http://blog.csdn.net/rackyye/archive/2008/03/04/2147170.aspx
相信大家在进行图形相关开发时,对CxImage一定非常熟悉,这是一个专门处理各种格式图形文件的C++库。我们在用OpenGL开发程序的时候,必然需要用到材质,对于简单的bmp格式,我们当然很轻松就能处理,但是对于像jpg,gif,tif,png,ico,pcx,tga等复杂格式,我们是不是就感觉很为难呢?其实用CxImage就能很轻松地处理这些格式文件。下面说一下CxImage的基本用法:
1、打开一张图
可以通过创建一个新的CxImage对象来完成,通过构造函数来打开一张图
CxImage::CxImage(const char * filename, DWORD imagetype)
其中filename是需要打开的文件路径,imagetype是文件类型,支持的类型有:
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,
当然,这么多格式很难记住,我们可以通过如下函数来直接获得文件的格式。
int FindType(const CString& filename)
{
CString ext = filename.Right(filename.GetLength()-filename.ReverseFind('.')-1);
int type = 0;
if (ext == "bmp") type = CXIMAGE_FORMAT_BMP;
#if CXIMAGE_SUPPORT_JPG
else if (ext=="jpg"||ext=="jpeg") type = CXIMAGE_FORMAT_JPG;
#endif
#if CXIMAGE_SUPPORT_GIF
else if (ext == "gif") type = CXIMAGE_FORMAT_GIF;
#endif
#if CXIMAGE_SUPPORT_PNG
else if (ext == "png") type = CXIMAGE_FORMAT_PNG;
#endif
#if CXIMAGE_SUPPORT_MNG
else if (ext=="mng"||ext=="jng") type = CXIMAGE_FORMAT_MNG;
#endif
#if CXIMAGE_SUPPORT_ICO
else if (ext == "ico") type = CXIMAGE_FORMAT_ICO;
#endif
#if CXIMAGE_SUPPORT_TIF
else if (ext=="tiff"||ext=="tif") type = CXIMAGE_FORMAT_TIF;
#endif
#if CXIMAGE_SUPPORT_TGA
else if (ext=="tga") type = CXIMAGE_FORMAT_TGA;
#endif
#if CXIMAGE_SUPPORT_PCX
else if (ext=="pcx") type = CXIMAGE_FORMAT_PCX;
#endif
#if CXIMAGE_SUPPORT_WBMP
else if (ext=="wbmp") type = CXIMAGE_FORMAT_WBMP;
#endif
#if CXIMAGE_SUPPORT_WMF
else if (ext=="wmf"||ext=="emf") type = CXIMAGE_FORMAT_WMF;
#endif
#if CXIMAGE_SUPPORT_J2K
else if (ext=="j2k"||ext=="jp2") type = CXIMAGE_FORMAT_J2K;
#endif
#if CXIMAGE_SUPPORT_JBG
else if (ext=="jbg") type = CXIMAGE_FORMAT_JBG;
#endif
#if CXIMAGE_SUPPORT_JP2
else if (ext=="jp2"||ext=="j2k") type = CXIMAGE_FORMAT_JP2;
#endif
#if CXIMAGE_SUPPORT_JPC
else if (ext=="jpc"||ext=="j2c") type = CXIMAGE_FORMAT_JPC;
#endif
#if CXIMAGE_SUPPORT_PGX
else if (ext=="pgx") type = CXIMAGE_FORMAT_PGX;
#endif
#if CXIMAGE_SUPPORT_RAS
else if (ext=="ras") type = CXIMAGE_FORMAT_RAS;
#endif
#if CXIMAGE_SUPPORT_PNM
else if (ext=="pnm"||ext=="pgm"||ext=="ppm") type = CXIMAGE_FORMAT_PNM;
#endif
else type = CXIMAGE_FORMAT_UNKNOWN;
return type;
}
2、保存一张图
bool CxImage::Save(LPCWSTR filename, DWORD imagetype=0)
参数和上面是一样的。
3、得到图形数据,以便在OpenGL中使用材质
BYTE* CxImage::GetBits(DWORD row = 0);
4、得到图形大小
long GetSize();
5、得到图形高度和宽度
DWORD CxImage::GetHeight();
DWORD CxImage::GetWidth();
6、得到文件类型
DWORD CxImage::GetType() const;
7、得到最后一个错误
char* CxImage::GetLastError();
8、在界面中绘制出来
long CxImage::Draw(HDC hdc, const RECT& rect, RECT* pClipRect=NULL)
HDC 绘图设备,rect 绘图的区域,确定绘图的左上角和右下角坐标。pClipRect,裁剪区域,一般可以和绘图区域一样大小,除非特殊需要。
分享到:
相关推荐
利用CxImage简单显示图片
自己编写的CxImage简单应用示例,可以读取图片的长度与宽度,亲测可以编译运行。
CxImage用法和资源下载 Includes lib 文档说明
CxImage用法(显示图像)及类库资源
本资源与CxImage示例所演示的内容不同,但是同样仅有简单的几行代码,目的是为了让CxImage初学者了解如何运用这个类库的用法,目的与CxImage示例一样,但是代码更简练,更容易突出重点。
Linux及aix下png及jpg图片相互转换的cximage类库!
图像处理库CxImage 图像处理库CxImage 图像处理库CxImage
本资源与CxImage示例所演示的内容不同,但是同样仅有简单的几行代码,目的是为了让CxImage初学者了解如何运用这个类库的用法,目的与CxImage示例一样,但是代码更简练,更容易突出重点。
已经配置好的文件夹,只需添加到工程中就可以,适合VC6.0,VS等。
使用CXimage制作的简单图像浏览器 可以关联注册表
简要说明CxImage的使用方法,有些简单,可以参考下
CxImage是一个代码开源的图像处理库,该资源包含CxImage库及使用实例,
Cximage Linux port tested in FC8
百度到的cximage的linux源码包已经下载不到,上传给有需要的程序猿们!
CxImage是一个可以简便而快速地打开、保存、显示和转换图像文件的 C++类库,它可以用于MFC,可以打开,保存,显示,转换各种常见格式的图像...”简单地说,你可以随意地使用这些代码,只要你不说它是你自己的就行了。
CxImage 是一个可以方便加载、保存、显示、处理图片的C++控件
一个简单的在win32平台下使用cximage来显示一张图片
CxImage是一个可以简便而快速地打开、保存、显示和转换图像文件的 C++类库,它可以用于MFC,可以打开,保存,显示,转换各种常见格式的图像...”简单地说,你可以随意地使用这些代码,只要你不说它是你自己的就行了。
cximage库的源码