CXImage使用说明文档格式.docx
- 文档编号:21492124
- 上传时间:2023-01-30
- 格式:DOCX
- 页数:11
- 大小:20.99KB
CXImage使用说明文档格式.docx
《CXImage使用说明文档格式.docx》由会员分享,可在线阅读,更多相关《CXImage使用说明文档格式.docx(11页珍藏版)》请在冰豆网上搜索。
CxImageisopensourceandlicensedunderthezliblicense.Inanutshell,thismeansthatyoucanusethecodehoweveryouwish,aslongasyoudon'
tclaimitasyourown.
由于很多人上codeproject的时候,老是上不去,所以,你也可以去这个类库的作者--DavidePizzolato的主页去下载
他的主页还有另外的源代码,有兴趣的也可以看看.
二。
编译CxImage类库
作者已经提供了整个类库配置的工程文件CxImgLib.dsw(VC++6.0),只要打开它进行编译即可。
需要大家注意的是:
整个CxImage类库非常大。
如果你只需要能处理其中的几种格式,编译该类库时,你可以在配置的头文件ximcfg.h中找到一些编译开关选项来关闭一些图像库。
JPG、PNG、TIFF中的每一个库,都会向最终程序增加约100KB的内容。
而CxImage类库压缩后只有约60KB。
所以,你需要谨慎挑选一些你真正需要的类库。
//类库配置文件:
ximacfg.h
#defineCXIMAGE_SUPPORT_JPG1
//如果要实现bmp->
jpg则必须打开
#defineCXIMAGE_SUPPORT_BMP1
#defineCXIMAGE_SUPPORT_GIF1
//以上为必须打开,下面的随便............
#defineCXIMAGE_SUPPORT_PNG0//不使用它
#defineCXIMAGE_SUPPORT_MNG0
#defineCXIMAGE_SUPPORT_ICO1
#defineCXIMAGE_SUPPORT_TIF0//
#defineCXIMAGE_SUPPORT_TGA0//
#defineCXIMAGE_SUPPORT_PCX0//
#defineCXIMAGE_SUPPORT_WBMP0//
#defineCXIMAGE_SUPPORT_WMF0//
#defineCXIMAGE_SUPPORT_J2K0//Beta,useJP2
#defineCXIMAGE_SUPPORT_JBG0
//.............
其他的可以不打开
编译该类库有好几个选择的工程,如下图所示:
CxImgLib.dsw
各工程的作用对应如下:
CxImage:
cximage.lib-staticlibrary
CxImageCrtDll:
cximagecrt.dll-DLLnotusingmfc
CxImageMfcDll:
cximage.dll-DLLusingmfc
Demo:
demo.exe-programlinkedwithcximage.libandtheClibraries
DemoDll:
demodll.exe-programlinkedwithcximagecrt.dll
j2k,jasper,jbig,jpeg,png,tiff,zlib:
staticClibraries
编译这些工程需要耗费几分钟的时间(中间文件可达60MB)。
三。
在程序中应用CxImage类库进行图像类型转换
在你的VC工程中使用这个类库,要对工程进行如下设置(ProjectSettings):
|-C/C++
||-CodeGeneration
|||-Userun-timelibrary:
MultithreadedDLL(mustbethesamefor
|||allthelinkedlibraries)//应该只要是多线程DLL即可,DEBUG的也行
|||-Structmemberalignment:
mustbethesameforallthelinkedlibraries
||-Precompiledheaders:
notusingprecompiledheaders
||-Preprocessor
||-AdditionalIncludeDirectories:
..\cximage(该处填CxImage里的.h和.cpp文件拷贝并导入工程后所在的文件夹,填写后在工程中include时编译器会查找该文件夹,故include的文件无需路径)
|-Link
|-General
;
|-Object/librarymodules:
png.lib
jpeg.lib
zlib.lib
tiff.lib
jasper.lib
cximage.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.从一种图像文件类型转换为另一种文件类型(convertfromaformattoanother)
CxImageimage;
//定义一个CxImage对象
//从bmp文件转换为jpg文件(bmp->
jpg)
image.Load("
image.bmp"
CXIMAGE_FORMAT_BMP);
//先装载bmp文件,需要指定文件类型
//判断加载的bmp文件是否存在。
if(image.IsValid())......{
//Returnstrueiftheimagehas256colorsandalineargreyscalepalette.
if(!
image.IsGrayScale())image.IncreaseBpp(24);
//paramnbit:
4,8,24
image.SetJpegQuality(99);
//设置图像的压缩质量参数(从0到100,数值越大,质量越高)
image.Save("
image.jpg"
CXIMAGE_FORMAT_JPG);
//把压缩后的图像以jpg文件类型保存起来。
}
//从png文件转换为tif文件(png->
tif)
image.png"
CXIMAGE_FORMAT_PNG);
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文件加入工程中即可。
路径.下面介绍应用它进行图像类型转换的方式:
1.从一种图像文件类型转换为另一种文件类型(convertfromaformattoanother)CxImageimage;
//定义一个CxImage对象//从bmp文件转换为jpg文件(bmp->
jpg)image.Load("
image.bmp"
CXIMAGE_FORMAT_BMP);
//先装载bmp文件,需要指定文件类型//判断加载的bmp文件是否存在。
if(image.IsValid())......{//Returnstrueiftheimagehas256colorsandalineargreyscalepalette.if(!
image.IsGrayScale())image.IncreaseBpp(24);
4,8,24image.SetJpegQuality(99);
//设置图像的压缩质量参数(从0到100,数值越大,质量越高)image.Save("
image.jpg"
CXIMAGE_FORMAT_JPG);
}//从png文件转换为tif文件(png->
tif)image.Load("
image.png"
CXIMAGE_FORMAT_PNG);
tyle.display='
none'
document.getElementById('
_95_145_Open_Text'
).style.display='
_95_145_Closed_Image'
inline'
_95_145_Closed_Text'
"
alt="
src="
align=top>
if(image.IsValid())...{
image.Save("
image.tif"
CXIMAGE_FORMAT_TIF);
}
2。
加载程序资源图像(loadanimageresource)
即从程序的资源图像中构建CxImage对象,有如下几种方式:
//LoadtheresourceIDR_PNG1fromthePNGresourcetype
CxImage*newImage=newCxImage();
newImage->
LoadResource(FindResource(NULL,MAKEINTRESOURCE(IDR_PNG1),
PNG"
),CXIMAGE_FORMAT_PNG);
或者
//LoadtheresourceIDR_JPG1fromDLL
HINSTANCEhdll=LoadLibrary("
imagelib.dll"
);
if(hdll)...{
HRSRChres=FindResource(hdll,MAKEINTRESOURCE(IDR_JPG1),"
JPG"
newImage->
LoadResource(hres,CXIMAGE_FORMAT_JPG,hdll);
FreeLibrary(hdll);
//Loadabitmapresource;
HBITMAPbitmap=:
:
LoadBitmap(AfxGetInstanceHandle(),
MAKEINTRESOURCE(IDB_BITMAP1)));
CxImage*newImage=newCxImage();
CreateFromHBITMAP(bitmap);
3。
在内存缓冲中的图像类型转换
(1)把内存缓冲中的数据解码成一个Image对象(decodeanimagefrommemory)
有如下几种方式:
------
CxImageimage((BYTE*)buffer,size,image_type);
//把内存缓冲buffer中的数据构造成Image对象
详细出处参考:
gn=top>
//或:
CxMemFilememfile((BYTE*)buffer,size);
//显式使用CxMemFile对象
CxImageimage(&
memfile,image_type);
//或:
CxImage*image=newCxImage();
image->
Decode(&
memfile,type);
============
(2)把Image编码存放到内存缓冲中(encodeanimageinmemory)
--------
longsize=0;
//得到图像大小
BYTE*buffer=0;
//存储图像数据的缓冲
image.Encode(buffer,size,image_type);
//把image对象中的图像以type类型数据copy到buffer
...
free(buffer);
或:
CxMemFilememfile;
memfile.Open();
image.Encode(&
BYTE*buffer=memfile.GetBuffer();
longsize=memfile.Size();
...
---------------
4。
处理系统粘贴板中的图像(copy/pasteanimage)
//copy(到粘贴板)
HANDLEhDIB=image->
CopyToHandle();
if(:
OpenClipboard(AfxGetApp()->
m_pMainWnd->
GetSafeHwnd()))
//或:
CxMemFilememfile((BYTE*)buffer,size);
//显式使用CxMemFile对象CxImageimage(&
amp;
memfile,image_type);
//或:
CxImage*image=newCxImage();
image->
Decode(&
memfile,type);
============
(2)把Image编码存放到内存缓冲中(encodeanimageinmemory)--------longsize=0;
//得到图像大小BYTE*buffer=0;
//存储图像数据的缓冲image.Encode(buffer,size,image_type);
//把image对象中的图像以type类型数据copy到buffer...free(buffer);
//显式使用CxMemFile对象memfile.Open();
image.Encode(&
BYTE*buffer=memfile.GetBuffer();
longsize=memfile.Size();
...free(buffer);
---------------4。
处理系统粘贴板中的图像(copy/pasteanimage)//copy(到粘贴板)HANDLEhDIB=image->
CopyToHandle();
if(:
OpenClipboard(AfxGetApp()->
m_pMainWnd->
GetSafeHwnd()))
8,128)1pxsolid;
BORDER-TOP:
rgb(128,128,128)1pxsolid;
DISPLAY:
none;
BORDER-LEFT:
BORDER-BOTTOM:
BACKGROUND-COLOR:
rgb(255,255,255)"
...{
if(:
EmptyClipboard())...{
SetClipboardData(CF_DIB,hDIB)==NULL)...{
AfxMessageBox("
UnabletosetClipboarddata"
);
}}}
CloseClipboard();
//paste(从粘贴板粘贴出来)
HANDLEhBitmap=NULL;
CxImage*newima=newCxImage();
if(OpenClipboard())hBitmap=GetClipboardData(CF_DIB);
if(hBitmap)newima->
CreateFromHANDLE(hBitmap);
5。
在picturebox中显示一个png格式的文件
HBITMAPm_bitmap=NULL;
CxImageimage("
myfile.png"
m_bitmap=image.MakeBitmap(m_picture.GetDC()->
m_hDC);
m_picture.SetBitmap(m_bitmap);
if(m_bitmap)DeleteObject(m_bitmap);
四。
其它
一个CxImage对象是一个扩展了的位图。
作者只是在位图结构上添加了一些起存储信息作用的成员变量。
一个CxImage对象(同时)也是一组层。
每个层只有在需要时才会分配相应的缓冲区。
CxImage:
pDib代表着背景图像,CxImage:
pAlpha代表着透明层,CxImage:
pSelection代表着被选中的层,被用来创建图像处理时让用户感兴趣的区域。
在这三个特殊层面的基础上,你可以增加一些额外的层,这些层可以存储在CxImage:
pLayers中。
一般说来,层是一个完整的CxImage对象。
因此,你可以构造很复杂的嵌套层。
下面是CxImage的一些成员变量:
classCxImage
...{if(:
EmptyClipboard())...{if(:
SetClipboardData(CF_DIB,hDIB)==NULL)...{AfxMessageBox("
}}}CloseClipboard();
//paste(从粘贴板粘贴出来)HANDLEhBitmap=NULL;
5。
在picturebox中显示一个png格式的文件HBITMAPm_bitmap=NULL;
...m_bitmap=image.MakeBitmap(m_picture.GetDC()->
m_picture.SetBitmap(m_bitmap
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- CXImage 使用说明
![提示](https://static.bdocx.com/images/bang_tan.gif)