ImageVerifierCode 换一换
格式:DOCX , 页数:17 ,大小:559.92KB ,
资源ID:8507255      下载积分:3 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bdocx.com/down/8507255.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(CxImage图像处理类库.docx)为本站会员(b****6)主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(发送邮件至service@bdocx.com或直接QQ联系客服),我们立即给予删除!

CxImage图像处理类库.docx

1、CxImage图像处理类库CxImage图像处理类库CxImage是一个可以用于MFC 的C 图像处理类库类,它可以打开,保存,显示,转换各种常见格式的图像文件,比如BMP, JPEG, GIF, PNG, TIFF, MNG, ICO, PCX, TGA, WMF, WBMP, JBG, J2K 等格式的文件。可以实现BMPJPG,PNG TIFF格式等等的互相转换。CxImage不仅可以实现图像文件的类型转换,还可以实现在内存图像数据的类型转换,并且使用很方便。除了文件格式的相互转换,它还提供了很多很多图像后处理的功能,比如图像模糊,锐化等等,功能非常强大和实用。CxImage中的x,大约

2、代表了丰富的图像格式支持和丰富的图像处理功能,可以说CxImage是图像处理的十全大补汤。用CxImage实现的图像处理程序开发环境:VC6, C , Windows, MFC, Visual Studio, VS6, Dev简介和许可CxImaage是一个可以简便而快速地打开,保存,显示和转换图像文件的C 类库。CxImage类库是免费的。对于TIFF,JPEG,PNG和ZLIB,如果你在你的产品中使用了这些源代码,虽然致谢不是必须的,但是却会得到众人的欣赏。CxImage是开源的并在zlib许可下发布。简单地说,你可以随意地使用这些代码,只要你不说它是你自己的就行了。文件格式和链接的库 C

3、xImage支持如下这些库的最新版本:Zlib (1.2.3), Jasper ( 1.900.1), LibMNG (1.0.10), LibPNG (1.2.24). LibTIFF 3.8.2 j2k库(现在被称为openjpeg)和相关的类CxImageJ2K已经从项目中删除。JPEG2000格式的文件由Jasper和CximageJAS来支持。Cximage 6.00提供了一个新的类CximageRAW和新的库LibDCR,用于读取来自数码相机的RAW图像。常见的文件扩展名有:RAW, CRW, NEF, CR2, DNG, ORF, ARW, ERF, 3FR, DCR, X3F,

4、 MEF, RAF, MRW, PEF, SR2。CximageRAW提供了对图像的基本解码功能,它唯一的可选参数可以由SetCodecOption进行设置,以对插值质量进行可控制。可选的选项有(DECODE_QUALITY_LIN=0, DECODE_QUALITY_VNG=1, DECODE_QUALITY_PPG=2, DECODE_QUALITY_AHD=3).CximagePNG:现在可以读取所有PNG_COLOR_TYPE_类型。但是,每个通道含有超过8位像素深度的PNG文件,会被转换到8位,这是CxImage的一个主要限制。CxImageGIF:现在能够更好地支持对动态GIF图像

5、的读取,通过SetRetreiveAllFrames设置属性,可以同时对图像中的所有帧进行解码。在CxImage的示例项目中,展示了如何实现这一选项,并展示了如何播放一副GIF动画。CxImageBMP: 支持对32位图像的读写(支持Alpha通道)CxImageICO: 支持对Vista PNG图标的读写;添加对多页图标的支持。CxImageMNG: 支持对MNG Alpha图层的读取。CxImageSKA: 新的用于支持SKA图像格式的类,这种图像通常用在视频租赁软件中。CxImageJPG: 为JPEG图像格式的二次采样提供了 新的选项。ENCODE_SUBSAMPLE_422,ENCO

6、DE_SUBSAMPLE_444),默认情况下是 高采样率的4:1:1 。当然,也可以被设置成中等的4:2:2或者低等的4:4:4。下图展示了不同采样率下,在压缩图像中所产生的不同数量的伪影。在压缩有着明显轮廓的图像的时候,采用4:4:4的采样率有助于减少轮廓的伪影。 可移植性所有的类和项目都通过了不同编译器的测试,包括从VC 6 到VC 2008的微软系列编译器,Borland C Builder 3和6,同时部分地支持wxDev-C 和MinGW。所有的库都支持UNICODE 和非UNICODE两个版本。(感谢Eric Jesover)对于第一次使用的用户,你可以使用一个轻量级的版本(cx

7、image600_lite)。这个版本去除了C库,但是添加了一个简单的示例项目。所有控制台示例(demo2)和CxImageCrtDll项目可以在VC Express2005和 Microsoft Platform SDK环境下编译通过。如果你在编译链接的时候,遇到像unresolved external.(无法找到外部符号)这样的错误,请检查是否所有C库都被编译了。或者手动地添加gdi32.lib 和user32.lib为项目的依赖库。同时,CxImage也可以在Pocket PC 2003上工作。在CxImage中,为VC 2005编译器提供了一个可以工作的版本和相应的实例(cximage

8、600_ce)。对于旧式的嵌入式VC编译器,最主要的限制是无法支持对异常的处理。为了解决这个问题,相应的异常处理语句try,throw和catch已经被定义在ximadef.h中的三个宏取代,同时还定义了CXIMAGE_SUPPORT_EXCEPTION_HANDLING。通过这样的方法,取消对异常处理的支持,可以成功编译链接整个库。虽然这个解决办法不是那么优雅,但是当异常处理被取消的时候,对代码的影响是最小的。同时,当异常处理被启用的时候,同样不会造成源代码的修改与变动。对于平台之间little-endian和big-endian的兼容性,对于内建支持的图像文件格式(bmp, ico, tg

9、a, pcx, gif, ska),由ntohs和ntohl控制。示例大多数新的特性可以在CxImage的主要示例程序中尝试和体验。这个示例程序只是一个测试平台,虽然它提供很多有用的特性,但是它实在不是一个严谨的应用程序。 CQuantizer : 这个类被DecreaseBpp菜单项所使用。在以前的版本中,这里有一个取整的错误,在某些情况下,白色(255,255,255)会被转换成(254,254,254)。在新的版本中,这个问题已经被修复了。 Copy/Paste : 现在,新的粘贴功能支持元文件图像(例如,从Office应用程序中复制而来的图像)。这个示例内部使用了自定义的剪切板格式以测

10、试Dump/Undump方法。Copy只工作在当前选区,但是你可以通过CxImageRemove Selection 复制整幅图像。FloodFill : (ViewToolsFlood Fill) 通过一个浮动的对话框,你可以测试色彩填充的颜色,偏差,透明度和是否选择。当透明度为0并且选择区域功能启用的时候,这个功能就变现为魔法棒,用于根据颜色选区某个区域。Graph data extraction : (Filtersgraph data extraction) 这个示例演示了如何从图像(从扫描仪获取或者从互联网下载所得)中提取数字信息。转换后的数据被粘贴到剪切板,同时可以被保存成文本文件

11、或者Excel表格文件。数据提取对话框数据提取结果RedEyeRemove : (FiltersNon LinearRemove Red Eye) 去除红眼的功能在照片处理中经常用到。你 必须在红眼周围选择一个区域,然后去除红眼的功能就会对红色通道进行过滤,从而去掉照片中的红眼。红眼的选区是一个矩形区域,同时可以包括部分的虹膜(眼黑),过滤器会在以选区中点为中心的圆心区域工作,不会影响到选中的眼黑部分。SelectiveBlur / UnsharpMask : 这些非线性的滤镜可以增加图像的质量。SelectiveBlur可以去除二次噪声(比如JPEG图像中的伪影或者是数码相机的噪声),从而展

12、示图像中的更多细节。而UnsharpMask可以增强图像的细节,但是却不会添加噪声。Custom linear filters : (FiltersLinearCustom) 一个用于测试新的滤镜功能核心的图像用户界面。Histogram : (ColorsHistogram.) 为了测试HistogramStretch(直方图),这个示例中提供了很多菜单项,通过不同的方法(0 = luminance, 1 = linked channels , 2 = independent channels)来测试直方图功能。对于有噪声的图像,阈值(threshold)这个参数增强了算法的健壮性。半饱和度

13、(Half Saturation)和全饱和度(Full Saturation)可以测试转换颜色空间(ConvertColorSpace),直方图(Histogram)和饱和度(Saturate)在YUV颜色空间对直方图的拉伸效果。Thresholding : ( ColorsThreshold. and ColorsAdaptive Threshold). 透明度阈值(OptimalThreshold)是一个新的用于查找二进制图像透明度阈值的新方法。可选的算法有:1 = 最大类间方差 (Otsu);2 = 基特勒和伊尔林格沃斯(Kittler & Illingworth);3 = 最大熵(ma

14、ximum entropy);4 = 位差(potential difference);0 = 平均所有方法 (默认情况下,这也是示例程序中所使用的方法);保留低于阈值的颜色(preserve colors less than the threshold)的选项,将测试Threshold2方法。这对于过滤带有噪声背景的彩色图像很有用。经过处理,我们将得到一幅带有一致背景的彩色图像(噪声被去除)。AdaptiveThreshold是对方法OptimalThreshold的一个应用,它将创建很多阈值模板。AdaptiveThreshold对于有着不一致的灯光照射效果的图像,非常有用。对于这类图像,

15、我们不能简单地在整幅图像中使用某个单一的阈值。但是,如果我们的参数设置得不对,我们将得到一个非常差劲的处理结果。Add shadow : (FiltersAdd Shadow.) 这个菜单项的功能演示了如何将CxImage的多个小功能(选择(selections),高斯模糊( GaussianBlur),混合( Mix)组合使用,以达到常见的图像处理效果。 Text smoothing : DrawStringEx 实现了一个新的选项CXTEXTINFO:smooth。我们可以通过文本工具(位于ViewToolsText),,选中抗锯齿(antialias)选项对这个功能进行测试。类似的效果也

16、同样可以利用TextBlur (FiltersNon LinearText Blur)进行后处理获得。这是一个非线性的过滤器,它只对角或圆形的边缘起作用,从而不会影响到纵向或横向的线。下图展示了不同平滑方法的实际效果: CxImage库的结构在整个库的继承树中,CxImage位于所有其他模块的顶部。这不是一个完全的符合OOP的方式,但是至少从最初的版本一直到现在,它都工作得很好。现在想要改变整个结构,已经太晚了。但是,你总是可以使用这些继承类来操作相应格式的图像,例如你可以使用CxImageTIF来保存多页的TIFF文件。这样显得非常直观。连接所有模块和C库的是CxFile。这是一个虚类,它提

17、供了标准的方法,用于访问硬盘或者内存的文件数据。 CxImage的继承树一个CxImage对象基本上对应于一副位图,同时添加了一些额外的成员变量用于存储一些有用的信息。CxImage.protected:void* pDib; /包含文件头,调色板和像素数据BITMAPINFOHEADER head; /标准文件头CXIMAGEINFO info; /扩展信息BYTE* pSelection; /选区BYTE * pAlpha; /alpha通道CxImage* ppLayers; /普通层CxImage* ppFrames; /动画的帧CxImage:head 是位图文件的文件头,而CxIm

18、age:pDib就是一个普通的位图(就像你在CxImageBMP:Encode中看到的一样)。 CxImage:info 是一个方便的信息容器。这些信息被不同的文件格式所共享,同时供所有成员函数访问。typedef struct tagCxImageInfo DWORD dwEffWidth; /双字节对齐宽度BYTE* pImage; /图像数据void* pGhost; /如果这是一个备份(ghost),/则pGhost指向它的原始对象 DWORD dwType; /原始图像格式char szLastError256; /调试信息,最后的错误信息long nProgress; /进度lon

19、g nEscape; /取消long nBkgndIndex; /GIF, PNG, MNG使用RGBQUAD nBkgndColor; /RGB透明使用BYTE nQuality; /JPEG使用long nFrame; /TIF, GIF, MNG使用,表示当前活动帧long nNumFrames; /TIF, GIF, MNG使用,表示总帧数 DWORD dwFrameDelay; /GIF, MNG使用,表示帧的延迟long xDPI; /水平分辨率 long yDPI; /垂直分辨率 RECT rSelectionBox; /对象的外包围框BYTE nAlphaMax; /最大透明度

20、bool bAlphaPaletteEnabled; /如果调色板中的alpha值是启用的,/则这个变量为true bool bEnabled; /启用绘制函数long xOffset;long yOffset;DWORD dwEncodeOption; /GIF, TIF使用:/ 0=def.1=unc,2=fax3,3=fax4,/ 4=pack,5=jpgRGBQUAD last_c; /用于优化GetNearestIndexBYTE last_c_index;bool last_c_isvalid;long nNumLayers;DWORD dwFlags; CXIMAGEINFO;C

21、xImage的不同层CxImage对象同样是图层的集合,每个图层的缓冲区只在需要的时候申请。CxImage:pDib是背景图像。 CxImage:pAlpha是透明层。CxImage:pSelection是选区层,用于创建要对图像的感兴趣区域进行处理的选择区域。在这三个特殊层之上,你可以添加通用的其他层,这些层都保存在CxImage:ppLayers中。通用层也是完整的CxImage对象,所以你可以创建复杂的嵌套层。CxImage:ppFrames 为动态图像(GIF)所预留。 CxImage类成员和操作CxImage使用Doxygen 产生文档,但是由于一些历史的原因,很多不太通用的功能还没

22、有文档。类成员的参考资料,发布历史以及许可信息都可以在这里(here )找到。支持的格式和选项整个CxImage库非常大,在主要的头文件ximcfg.h中,你可以找到很多编译选项开关,用于启用或者禁用某些特定的图像格式或者功能。每个JPG, PNG和 TIFF库将使得应用程序增加大约100KB的大小,同时,CxImage将使得应用程序增加大约50KB的大小。所以,为了减小你的应用程序的体积,你应该支持和链接你的应用程序确实需要的格式。格式定义#define需要的库尺寸 KBBMPGIFICOTGAPCXWBMPWMFSKACXIMAGE_SUPPORT_BMPCXIMAGE_SUPPORT_G

23、IFCXIMAGE_SUPPORT_ICOCXIMAGE_SUPPORT_TGACXIMAGE_SUPPORT_PCXCXIMAGE_SUPPORT_WBMPCXIMAGE_SUPPORT_WMFCXIMAGE_SUPPORT_SKA内建24JPEGCXIMAGE_SUPPORT_JPGjpeg88PNGCXIMAGE_SUPPORT_PNGpng, zlib104MNGCXIMAGE_SUPPORT_MNGmng, zlib, jpeg148共17页: 上一页 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 下一页 TIFFCXIMAGE_SUPPORT_

24、TIFtiff, zlib, jpeg124JBIGCXIMAGE_SUPPORT_JBGjbig28PNM,PPM,PGMRASCXIMAGE_SUPPORT_PNMCXIMAGE_SUPPORT_RASjasper176JPEG-2000CXIMAGE_SUPPORT_JP2CXIMAGE_SUPPORT_JPCCXIMAGE_SUPPORT_PGXjasper176RAWCXIMAGE_SUPPORT_RAWlibdcr132选项定义#define尺寸KBCxImage核心所有开关关闭20几何变换(geometric transformations)CXIMAGE_SUPPORT_TRA

25、NSFORMATION16图像处理 (image processing)CXIMAGE_SUPPORT_DSP24绘制和特殊的窗口函数 (drawing and windows specific functions)CXIMAGE_SUPPORT_WINDOWS12透明 (transparency)CXIMAGE_SUPPORT_ALPHA4选择 (selections)CXIMAGE_SUPPORT_SELECTION4多层支持 (multiple layers)CXIMAGE_SUPPORT_LAYERS 4图像格式转换 (graphic formats conversion)CXIMAG

26、E_SUPPORT_DECODECXIMAGE_SUPPORT_ENCODE 4插值函数 (interpolation functions)CXIMAGE_SUPPORT_INTERPOLATION 4异常处理 (exception handling)CXIMAGE_SUPPORT_EXCEPTION_HANDLING 4在你的项目中使用CxImage如下图所示,CxImgLib.dsw工作空间展示了构建一个包含绝大多数功能和支持大多数图像格式的应用程序(demo.exe)所需要的所有库。你必须先编译所有的库,然后才可以链接你最终的应用程序。CxImgLib.dsw工作空间在相同的工作空间中,

27、你可以找到用于构建不同库和应用程序的项目: CxImage : cximage.lib - 静态库 CxImageCrtDll : cximagecrt.dll - DLL,不使用MFC CxImageMfcDll : cximage.dll - DLL,使用MFCDemo : 示例程序demo.exe,跟cximage.lib和C库链接。 DemoDll : demodll.exe - 跟cximagecrt.dll链接 libdcr,jasper,jbig,jpeg,png,tiff,zlib : 静态的C库 构建这些项目需要几分钟时间,当所有项目构建完成后,你可以选择demo项目并执行应

28、用程序。要想在你自己的项目中使用CxImage,你必须编辑下面这些项目设置设置(针对Visual C 6.0):Project Settings(项目设置)|- C/C | |- Code Generation| | |- 运行时库 : 多线程DLL(所有链接的库都必须使用相同的设置) | | |- 结构成员对齐方式 : 所有链接的库都必须相同 | |- 预编译头文件 : 不使用预编译头文件| |- 预处理器: | |- 添加额外的包含(Include)路径: .cximage|- Link|- General|- Object/library modules(附加的依赖库): ./png/D

29、ebug/png.lib ./raw/Debug/libdcr.lib./jpeg/Debug/jpeg.lib ./zlib/Debug/zlib.lib ./tiff/Debug/tiff.lib./jasper/Debug/jasper.lib./cximage/Debug/cximage.lib .在你的源代码中,你必须引入CxImage的头文件ximage.h。在你的代码中添加如下语句:#include ximage.h。注意,不要混合debug和release模块,每个配置必须使用各自相应的库文件。在CxImage中添加自定义的函数 为CxImage添加一个新的图像处理函数并不困难

30、。在这里,我将以CxImage:Jitter为例子,描述如何为CxImage添加自定义的函数。虽然这个函数很简单, 但是它却展示了使用CxImage时所需要注意的方方面面。首先,我们需要声明这个函数:Jitter(long radius=2)在ximage.h头文件的CXIMAGE_SUPPORT_DSP部分,你可以在public区域的任何部分声明这个函数。现在,我们开始定义这个函数:CxImage:Jitter(long radius)/ 检查图像是否合法,这应当是这个函数的第一行if (!pDib) return false;/ 局部变量long nx,ny;/ 临时图像,用于存储算法的部分结果CxImage tmp(*this,pSelection!=0,true,true);/ 限制函数仅仅作用在选区(通过Se

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1