第10章图象处理编程工具及简单的 多媒体编程 在前九章,我们主要是介绍一些数字图象处理的基本原理和算法,很多细节 和优化的算法都没有提,所以程序的通用性和效率并不理想。其实有很多优秀的 图象处理编程工具,功能强大,速度很快。在实际的编程中,可以调用它们提供 的功能来满足我们自己的需求,提高了编程效率和代码的正确性。 在这一章里,将介绍图象处理编程工具 Lead tools(OCX)。给出的例程中要 用到 Visual C++(以下简称VC)的 AppWizard和MC的一些特性,不熟悉C++ 的读者可以先看看相关的参考书。 10.1 LeadTools Lead Tools((OCX)是 Lead Technologies公司出品的一款功能强大的图象处理 编程工具,目前的最新版本是Lead80(1997725)。 Lead tools实质上是一个OCX 控件。先来说说什么是OCX控件? 如果你用过 Visual basic或者 Delphi一类的可视化编程工具,那么对控件这 个概念一定不会陌生,就是那些工具条上的小按钮,如 EditBox,Grid, Image Box, imer等等。每个控件都有自己的事件(事件)、方法(方法)和属性(属性)。使用 了控件的编程非常容易。首先,在程序的设计阶段可以设置一些属性,如大小, 位置,标题( caption)等等;在程序运行阶段,可以更改这些属性,还可以针对不 同的事件,调用不同的方法来实现对该控件的控制。控件就好象一块块的积木 程序要做的事只是将这些积木搭起来。控件的最大好处是可以重复使用,甚至可 以在不同的编程语言之间使用,例如你可以在VB中嵌入用ⅴC开发的控件。 控件的本质是微软公司的对象链接和嵌入(OLE)标准。由于它充分利用了面 向对象的优点,使得程序效率得到了很大的提高,从而得到了广泛的应用。国外 有很多公司就是专门制作各种各样控件的。控件的最早形式是以VBX的格式出 现的,后来变成了OCX。由于 Internet的广泛流行,微软公司推出了 ActiveX技 术,就是从OLE发展起来的,加入了WWW上的功能。所以目前最流行的是 ActiveX控件 介绍完了OCX控件的概念,下面我们以 Lead version5.1为例,来看看 Lead tools究竟有哪些功能?LeadⅤ ersion5.1可以在正版 MicroSoft visual C++4 安装光盘中 Msdev samples\ocx leadtools和 Msdev\\red ist下找到,主要是4 个文件,Lead5lndl,Lead32.ocx, Lead. lic, Ltocx hlp。如果你想了解 Lead tools 的最新信息,可以访问以下www网址:htt/www.leadtools.com/。 Lead tools主要有以下几大功能
第 10 章 图象处理编程工具及简单的 多媒体编程 在前九章,我们主要是介绍一些数字图象处理的基本原理和算法,很多细节 和优化的算法都没有提,所以程序的通用性和效率并不理想。其实有很多优秀的 图象处理编程工具,功能强大,速度很快。在实际的编程中,可以调用它们提供 的功能来满足我们自己的需求,提高了编程效率和代码的正确性。 在这一章里,将介绍图象处理编程工具 LeadTools(OCX)。给出的例程中要 用到 Visual C++(以下简称 VC)的 AppWizard 和 MFC 的一些特性,不熟悉 C++ 的读者可以先看看相关的参考书。 10.1 LeadTools LeadTools(OCX)是 Lead Technologies 公司出品的一款功能强大的图象处理 编程工具,目前的最新版本是 Lead8.0(1997.7.25)。LeadTools 实质上是一个 OCX 控件。先来说说什么是 OCX 控件? 如果你用过 Visual Basic 或者 Delphi 一类的可视化编程工具,那么对控件这 个概念一定不会陌生,就是那些工具条上的小按钮,如 EditBox,Grid,ImageBox, Timer 等等。每个控件都有自己的事件(事件) 、方法(方法)和属性(属性)。使用 了控件的编程非常容易。首先,在程序的设计阶段可以设置一些属性,如大小, 位置,标题(caption)等等;在程序运行阶段,可以更改这些属性,还可以针对不 同的事件,调用不同的方法来实现对该控件的控制。控件就好象一块块的积木, 程序要做的事只是将这些积木搭起来。控件的最大好处是可以重复使用,甚至可 以在不同的编程语言之间使用,例如你可以在 VB 中嵌入用 VC 开发的控件。 控件的本质是微软公司的对象链接和嵌入(OLE)标准。由于它充分利用了面 向对象的优点,使得程序效率得到了很大的提高,从而得到了广泛的应用。国外 有很多公司就是专门制作各种各样控件的。控件的最早形式是以.VBX 的格式出 现的,后来变成了.OCX。由于 Internet 的广泛流行,微软公司推出了 ActiveX 技 术,就是从 OLE 发展起来的,加入了 WWW 上的功能。所以目前最流行的是 ActiveX 控件。 介绍完了 OCX 控件的概念,下面我们以 Lead Version5.1 为例,来看看 LeadTools究竟有哪些功能?Lead Version5.1可以在正版MicroSoft Visual C++4.1 安装光盘中 Msdev\samples\ocx\leadtools 和 Msdev\redist\redist 下找到,主要是 4 个文件, Lead51n.dll,Lead32.ocx,Lead.lic,Ltocx.hlp。如果你想了解 LeadTools 的最新信息,可以访问以下 www 网址:http://www.leadtools.com/。 LeadTools 主要有以下几大功能:
(1)对显示设备的全面支持:在显示时,你的程序中无需考虑是哪种显示模 式,如16色还是真彩色。 Lead tools为你做了所有的事。当然你也可以通过设置 参数获得对显示设备更多的控制。你还可以实现自己的调色板 (2)支持多种文件格式:表10.1是 Lead tools所支持的常用文件格式,其中 读表示用 Lead tools能打开的文件格式,写表示 Leat tools能存成的文件格式: 表10.1 Leadon支持的常用文件格式 文件格式读位/象素)写(位/象素) JF:一种常用的neg文8(灰度) 件格式, Lead tools支持YUV 444224(彩色)YUV24(彩色 24(彩色) 400(灰度) JFIF:另一种常用的Jpeg8(灰度) 8(灰度) 文件格式, LeadTools支持 YUV444,422,41l(彩 24(彩色) 24(彩色) 色YUVv40:0(灰度) IFF:Tif件有很多种 l,4,8,16,24,32, 1,4,8,16,24 ead Tools支持常用的几种 包括另一种颜色表示方法 CMYK(LZW压缩)和RLE LZW压缩) MPT 种多页1,4,8,16,24,32, 1,4,8,16,24 MultiPage)的Tif件格式,还包括另一种颜色表示方法 类似于动画Gif CMYK(LZW压缩)和 (LZW压缩) TIFF LZW:采用LZW压 1.4.8.16.24.32 1.8.16.24 缩的Tff格式,使用时要获得 Unisys公司的认可。 FF CCITT Group3:是 种用于二值黑白图(如传真 的Tf压缩格式 FF CCITT Group4:是 种用于二值黑白图(如传真 的Tf压缩格式。比 Group 有更高的压缩比。 TGA (TARGA 8,16,24,32 8,16,24,32 revision公司的一种文件格 式, Lead Tools支持所有未压缩 的,及用RLE算法压缩的TGA
(1) 对显示设备的全面支持:在显示时,你的程序中无需考虑是哪种显示模 式,如 16 色还是真彩色。LeadTools 为你做了所有的事。当然你也可以通过设置 参数获得对显示设备更多的控制。你还可以实现自己的调色板。 (2) 支持多种文件格式:表 10.1 是 LeadTools 所支持的常用文件格式,其中 读表示用 LeadTools 能打开的文件格式,写表示 LeatTools 能存成的文件格式: 表 10.1 LeadTools 支持的常用文件格式 文件格式 读(位/象素) 写(位/象素) JFIF:一种常用的 Jpeg 文 件格式,LeadTools 支持 YUV 4:4:4, 4:2:2, 4:1:1( 彩色)YUV 4:0:0(灰度) 8 (灰度) 24(彩色) 8 (灰度) 24(彩色) JFIF:另一种常用的 Jpeg 文件格式, LeadTools 支 持 YUV 4:4:4, 4:2:2, 4:1:1( 彩 色)YUV 4:0:0(灰度) 8 (灰度) 24(彩色) 8 (灰度) 24(彩色) TIFF:Tiff 文件有很多种, LeadTools 支持常用的几种 1,4,8,16,24,32, 还包括另一种颜色表示方法 CMYK (LZW 压缩) 和 RLE (LZW 压缩) 1, 4, 8, 16, 24 MPT : 一 种 多 页 (MultiPage)的 Tiff 文件格式, 类似于动画 Gif。 1,4,8,16,24,32, 还包括另一种颜色表示方法 CMYK (LZW 压缩) 和 RLE (LZW 压缩) 1, 4, 8, 16, 24 TIFF LZW:采用 LZW 压 缩的 Tiff 格式,使用时要获得 Unisys 公司的认可。 1, 4, 8, 16, 24, 32 1, 8, 16, 24 TIFF CCITT Group 3:是 一种用于二值黑白图(如传真) 的 Tiff 压缩格式。 1 1 TIFF CCITT Group 4:是 一种用于二值黑白图(如传真) 的 Tiff 压缩格式。比 Group 3 有更高的压缩比。 1 1 TGA (TARGA) : Truevision 公司的一种文件格 式,LeadTools 支持所有未压缩 的,及用 RLE 算法压缩的 TGA 8, 16, 24, 32 8, 16, 24, 32
文件。 GHF:由 CompuServe公1,4.8 司定义的一种文件格式,是 tm语言采用的一种文件格 式。要注意的是,使用采用了 LZW压缩的Gf文件时,首先 要获得 Unisys公司的认可。 Photoshop 3.0(PSD) 1.8.24 1.8.24 Adobe公司 PhotoShop3.0所采 用的文件格式 Windows Bitmap(BMP): 1,4,8,24(未压缩) 1.4.8.2 由微软公司定义的文件格式 1,4,8(采用RLE压缩) Windows 8.24 WMF):一种矢量图文件格式 在Word中用到。 PCX:由Zt公司制定1,4,8,24 的一种文件格式,采用了行程 编码 SUN Raster(RAS):t 1. 4.8,24.32 14.8.24.32 Sun UNIX平台上的一种文件 格式 PCD:柯达公司的所有 不能写 PhotoCD文件格式。要注意的 是要有 PCDLIB32DL这个文 件 以上只是常用的文件格式,除此以外还有很多其它的文件格式,感兴趣的读 者可以参考帮助。 (3)图象处理:如二值化、平滑、加噪声、增加对比度、色调、饱和度、亮 度、 Gamma校正、中值滤波、半影调、抖动、橡皮筋、滚动、填充、反色、镜 象、马赛克、浮雕、打印、扫描、拷贝、粘贴、裁剪、缩放、截屏、调色板、直 方图、有关数据库的操作、还有制作幻灯的功能,如淡入、淡出、卷帘等等、真 的很爽。表102是 Version5.1的所有属性、事件、和方法列表,看看有没有你 所需要的功能。以字母顺序排列,其中标P]的表示只有专业级( Professional)和特 殊级( Express)用户才能使用 表10.2 LeadTools的事件、属性、方法 AboutBox方法:显示 Lead Tools的“关于”信息
文件。 GIF:由 CompuServe 公 司定义的一种文件格式,是 html 语言采用的一种文件格 式。要注意的是,使用采用了 LZW 压缩的 Gif 文件时,首先 要获得 Unisys 公司的认可。 1, 4, 8 8 Photoshop 3.0 (PSD) : Adobe 公司 PhotoShop3.0 所采 用的文件格式。 1, 8, 24 1, 8, 24 Windows Bitmap (BMP): 由微软公司定义的文件格式。 1, 4, 8, 24(未压缩) 1, 4, 8(采用 RLE 压缩) 1, 4, 8, 24 Windows Metafile (WMF):一种矢量图文件格式。 在 Word 中用到。 8, 24 8, 24 PCX:由 Zsoft 公司制定 的一种文件格式,采用了行程 编码。 1, 4, 8, 24 1, 4, 8, 24 SUN Raster (RAS) :在 Sun UNIX 平台上的一种文件 格式。 1, 4, 8, 24, 32 1, 4, 8, 24, 32 PCD : 柯 达 公 司 的 PhotoCD 文件格式。要注意的 是要有 PCDLIB32.DLL 这个文 件。 所有 不能写 以上只是常用的文件格式,除此以外还有很多其它的文件格式,感兴趣的读 者可以参考帮助。 (3) 图象处理:如二值化、平滑、加噪声、增加对比度、色调、饱和度、亮 度、Gamma 校正、中值滤波、半影调、抖动、橡皮筋、滚动、填充、反色、镜 象、马赛克、浮雕、打印、扫描、拷贝、粘贴、裁剪、缩放、截屏、调色板、直 方图、有关数据库的操作、还有制作幻灯的功能,如淡入、淡出、卷帘等等、真 的很爽。表 10.2 是 Version5.1 的所有属性、事件、和方法列表,看看有没有你 所需要的功能。以字母顺序排列,其中标[P]的表示只有专业级(Professional)和特 殊级(Express)用户才能使用。 表 10.2 LeadTools 的事件、属性、方法 AboutBox 方法:显示 LeadTools 的“关于”信息
P] Addnoise方法:增加随机噪声 AutoRepain属性:该属性为真时,位图自动重画 AutoScroll属性:该属性为真时,当位图超出窗口范围时,自动出现滚动条 AutoSetRects属性:该属性为真时,自动调整窗口大小 PI Back Color属性:该属性设置位图的背景色 BackErase属性:该属性为真时,擦除控件的背景 [E] Binary Filter方法:对黑色对象进行腐蚀或膨胀操作 Bitmap属性:该属性为位图句柄 Bitmap Bits属性:该属性为每个象素所占的比特数 BitmapHeight属性:该属性为位图的高 BitmapPalette属性:该属性设置调色板中某一项的RGB值 Bitmap width属性:该属性为位图的宽 BitmapXRes属性:该属性为位图的水平分辨率 BitmapY Res属性:该属性为位图的垂直分辨率 田] BitonalScalin属性:设置该属性,以增强二值图的显示效果 BorderStyle属性:该属性为0时,控件周围没有边框,为1时有边框 P] Capture方法:从某一设备上下文指定的矩形区域中获得位图(截屏) Click事件:当用户点击控件时,触发该事件 P] Color Merge方法:融合调色板 P] ColorPlanes属性:该属性为灰度图的调色板数组 Colorres方法:颜色数转换 P] ColorSeparate方法:按照调色板将位图分离成一个个的灰度图 P] Combine方法:将两幅图结合,例如另一幅图是一个边沿检测的滤波器 Contrast方法:增加或减少位图的对比度 copy方法:将位图拷贝至剪贴板 Create Bitmap方法:对位图初始化并分配内存,但不调入任何数据 P] dbAddNew方法:为当前记录集增加一个新的空记录 P] dbCanAppend属性:该属性为真时,表示可以在当前记录集中增加一个记录 PIdb Canrestart属性:该属性为真时,表示可以从数据库中重建记录集 P] db Can Scroll属性:该属性为真时,表示数据源支持 above方法,可以在记录集 中滚 P] db canUpdate属性:该属性为真时,表示可以在当前记录集中增加或者更新 P] db close方法:关闭当前记录集和数据库
[P] AddNoise 方法:增加随机噪声 AutoRepaint 属性:该属性为真时,位图自动重画 AutoScroll 属性:该属性为真时,当位图超出窗口范围时,自动出现滚动条 AutoSetRects 属性:该属性为真时,自动调整窗口大小 [P] Average 方法:平滑 BackColor 属性:该属性设置位图的背景色 BackErase 属性:该属性为真时,擦除控件的背景 [E] BinaryFilter 方法:对黑色对象进行腐蚀或膨胀操作 Bitmap 属性:该属性为位图句柄 BitmapBits 属性:该属性为每个象素所占的比特数 BitmapHeight 属性:该属性为位图的高 BitmapPalette 属性:该属性设置调色板中某一项的 RGB 值 BitmapWidth 属性:该属性为位图的宽 BitmapXRes 属性:该属性为位图的水平分辨率 BitmapYRes 属性:该属性为位图的垂直分辨率 [E] BitonalScaling 属性:设置该属性,以增强二值图的显示效果 BorderStyle 属性:该属性为 0 时,控件周围没有边框,为 1 时有边框 [P] Capture 方法:从某一设备上下文指定的矩形区域中获得位图(截屏) Click 事件:当用户点击控件时,触发该事件 [P] ColorMerge 方法:融合调色板 [P] ColorPlanes 属性:该属性为灰度图的调色板数组 ColorRes 方法:颜色数转换 [P] ColorSeparate 方法:按照调色板将位图分离成一个个的灰度图 [P] Combine 方法:将两幅图结合,例如另一幅图是一个边沿检测的滤波器 Contrast 方法:增加或减少位图的对比度 Copy 方法:将位图拷贝至剪贴板 CreateBitmap 方法:对位图初始化并分配内存,但不调入任何数据 [P] dbAddNew 方法:为当前记录集增加一个新的空记录 [P] dbCanAppend 属性:该属性为真时,表示可以在当前记录集中增加一个记录 [P] dbCanRestart 属性:该属性为真时,表示可以从数据库中重建记录集 [P] dbCanScroll 属性:该属性为真时,表示数据源支持 dbMove 方法,可以在记录集 中滚 动 [P] dbCanUpdate 属性:该属性为真时,表示可以在当前记录集中增加或者更新一个记 录 [P] dbClose 方法:关闭当前记录集和数据库
P] db CurrentRecord属性:记录集中当前记录号 P] dbDelete方法:删除当前记录 P] dbEdit方法:为更新当前记录做准备 P] dbEditMode属性:指示当前记录的编辑模式,如只读,可编辑,可添加 P] dbIsboF属性:指示是否到了最前面的记录 dbed属性:指示当前记录是否已经被删除 P] abIseo属性:指示是否到了最后面的记录 P] dblsOpen属性:指示是否和一个数据库相连 DblClick事件:当用户双击控件时,触发该事件 P] dbload Bits属性:指示从数据库中调入位图时,每个象素所占的比特数,为0时, 和原来位图的颜色数保持一致 P] blOcking Mode属性:当对数据库中已有记录进行更新时,该属性用来指定记录锁 定模式 P] abOve方法:将当前记录移动到指定位置 P] dbmovef irst方法:选定记录集中的第一个记录 P] dbMovelast方法:选定记录集中的最后一个记录 db MoveNext方法:选定记录集中的下一个记录 P] dbMove Prev方法:选定记录集中的前一个记录 P] dbopen方法:在ODBC类型的数据库中打开一个记录集 P] dbRecordCount属性:指示记录集中的记录数 P] dbRequery方法:从数据库中重建记录集 P] dbupdate方法:更新数据库(当调用 dbAddNew或者dEdt后) [E] Deskew方法:旋转位图使其变正,常用于扫描图象的自动纠斜 [E] Despeckle方法:去除位图中的小斑点 DstClipHeight属性:指定目标剪切矩形的高度 Dst ClipLeft属性:指定目标剪切矩形的左坐标 Dst ClipTop属性:指定目标剪切矩形的上坐标 Dst Clipwidth属性:指定目标剪切矩形的宽度 Dst height属性:指定目标矩形的高度 DstLeft属性:指定目标矩形的左坐标 Dst Top属性:指定目标矩形的上坐标 Dst width属性:指定目标矩形的宽度 P] Emboss方法:制作浮雕效果 Enabled属性:指定控件是否使能 EnableMethodErrors属性:指示控件是否导致了系统错误
[P] dbCurrentRecord 属性:记录集中当前记录号 [P] dbDelete 方法:删除当前记录 [P] dbEdit 方法:为更新当前记录做准备 [P] dbEditMode 属性:指示当前记录的编辑模式,如只读,可编辑,可添加 [P] dbIsBOF 属性:指示是否到了最前面的记录 [P] dbIsDeleted 属性:指示当前记录是否已经被删除 [P] dbIsEOF 属性:指示是否到了最后面的记录 [P] dbIsOpen 属性:指示是否和一个数据库相连 DblClick 事件:当用户双击控件时,触发该事件 [P] dbLoadBits 属性:指示从数据库中调入位图时,每个象素所占的比特数,为 0 时, 和原来位图的颜色数保持一致 [P] dbLockingMode 属性:当对数据库中已有记录进行更新时,该属性用来指定记录锁 定模式 [P] dbMove 方法:将当前记录移动到指定位置 [P] dbMoveFirst 方法:选定记录集中的第一个记录 [P] dbMoveLast 方法:选定记录集中的最后一个记录 [P] dbMoveNext 方法:选定记录集中的下一个记录 [P] dbMovePrev 方法:选定记录集中的前一个记录 [P] dbOpen 方法:在 ODBC 类型的数据库中打开一个记录集 [P] dbRecordCount 属性:指示记录集中的记录数 [P] dbRequery 方法:从数据库中重建记录集 [P] dbUpdate 方法:更新数据库(当调用 dbAddNew 或者 dbEdit 后) [E] Deskew 方法:旋转位图使其变正,常用于扫描图象的自动纠斜 [E] Despeckle 方法:去除位图中的小斑点 DstClipHeight 属性:指定目标剪切矩形的高度 DstClipLeft 属性:指定目标剪切矩形的左坐标 DstClipTop 属性:指定目标剪切矩形的上坐标 DstClipWidth 属性:指定目标剪切矩形的宽度 DstHeight 属性:指定目标矩形的高度 DstLeft 属性:指定目标矩形的左坐标 DstTop 属性:指定目标矩形的上坐标 DstWidth 属性:指定目标矩形的宽度 [P] Emboss 方法:制作浮雕效果 Enabled 属性:指定控件是否使能 EnableMethodErrors 属性:指示控件是否导致了系统错误