《数字图像处理入门》第10章(无水印)
- 格式:doc
- 大小:157.00 KB
- 文档页数:15
二、课程章节主要内容及学时分配第一章、数字图像处理方法概述讲课3课时了解本课程研究的对象、内容及其在培养软件编程高级人才中的地位、作用和任务;了解数字图像处理的应用;了解数字图像的基本概念、与设备相关的位图(DDB)、与设备无关的位图(DIB);了解调色板的基本概念和应用;了解CDIB类与程序框架结构介绍;了解位图图像处理技术。
重点:CDIB类与程序框架结构介绍。
难点:调色板的基本概念和应用。
第二章、图像的特效显示讲课3课时、实验2学时了解扫描、移动、百叶窗、栅条、马赛克、渐显与渐隐、浮雕化特效显示。
重点:渐显与渐隐。
难点:马赛克。
第三章、图像的几何变换讲课2课时了解图像的缩放、平移、镜像变换、转置、旋转。
重点:镜像变换。
难点:旋转。
第四章、图像灰度变换讲课3课时、实验2学时了解非0元素取1法、固定阈值法、双固定阈值法的图像灰度变换;了解灰度的线性变换、窗口灰度变换处理、灰度拉伸、灰度直方图、灰度分布均衡化。
重点:灰度直方图。
难点:灰度分布均衡化。
第五章、图像的平滑处理讲课3课时了解二值图像的黑白点噪声滤波、消除孤立黑像素点、3*3均值滤波、N*N 均值滤波器、有选择的局部平均化、N*N中值滤波器、十字型中值滤波器、N*N最大值滤波器、产生噪声。
重点:消除孤立黑像素点、中值滤波器。
难点:有选择的局部平均化。
第六章、图像锐化处理及边缘检测讲课3课时、实验2学时了解梯度锐化、纵向微分运算、横向微分运算、双方向一次微分运算、二次微分运算、Roberts边缘检测算子、Sobel边缘检测算子、Krisch边缘检测、高斯-拉普拉斯算子。
重点:Roberts边缘检测算子、高斯-拉普拉斯算子。
难点:梯度锐化。
第七章、图像分割及测量讲课4课时了解图像域值分割、轮廓提取、轮廓跟踪、图像的测量。
重点:轮廓提取、轮廓跟踪。
难点:图像的测量。
包括:图像的区域标记、图像的面积测量及图像的周长测量。
第八章、图像的形态学处理讲课3课时了解图像腐蚀、图像的膨胀、图像开启与闭合、图像的细化、图像的粗化、中轴变化。
鏅烘収鏍戠煡鍒般€婃暟瀛楀浘鍍忓鐞嗐€嬬珷鑺傛祴璇曠瓟妗? 绗竴绔?1銆佽〃绀轰竴骞呯伆搴﹀浘鍍忥紝涓€鑸敤锛堬級锛?涓€涓父鏁?浜岀淮鐭╅樀涓夌淮鐭╅樀涓€涓彉閲?绛旀: 浜岀淮鐭╅樀2銆佸僵鑹插浘鍍忎腑锛屾瘡涓儚绱犵偣鐢紙锛夎〃绀鸿壊褰╁€硷紵涓€涓€?浜屼釜鍊?涓変釜鍊?鍥涗釜鍊?绛旀: 涓変釜鍊?3銆佷笉鍙鍏夋槸鍙互褰㈡垚鍥惧儚鐨?瀵?閿?绛旀: 瀵?4銆佹暟瀛楀浘鍍忕殑璐ㄩ噺涓庨噺鍖栫瓑绾ф湁鍏?瀵?閿?绛旀: 瀵?5銆佷竴骞呮ā鎷熷浘鍍忚浆鍖栦负鏁板瓧鍥惧儚锛岃缁忚繃锛堬級锛?閲嶆媿閲嶆媿閲囨牱閲忓寲鍙樻崲绛旀: 閲囨牱,閲忓寲6銆佹煇涓儚绱犵殑閭诲煙锛屼竴鑸湁锛堬級锛?4-閭诲煙8-閭诲煙10-閭诲煙瀵硅閭诲煙绛旀: 4-閭诲煙,8-閭诲煙,瀵硅閭诲煙绗簩绔?1銆佸倕閲屽彾鍙樻崲寰楀埌鐨勯璋变腑锛屼綆棰戠郴鏁板搴斾簬锛堬級锛? 鐗╀綋杈圭紭鍣煶鍙樺寲骞崇紦閮ㄥ垎鍙樺寲鍓х儓閮ㄥ垎绛旀: 鍙樺寲骞崇紦閮ㄥ垎2銆佷竴骞呬簩鍊煎浘鍍忕殑鍌呴噷鍙跺彉鎹㈤璋辨槸锛堬級锛?涓€骞呬簩鍊煎浘鍍?涓€骞呯伆搴﹀浘鍍?涓€骞呭鏁板浘鍍?涓€骞呭僵鑹插浘鍍?绛旀: 涓€骞呯伆搴﹀浘鍍?3銆佸倕閲屽彾鍙樻崲鏈変笅鍒楀摢浜涚壒鐐癸紙锛夛紵鏈夐鍩熺殑姒傚康鍧囨柟鎰忎箟涓嬫渶浼?鏈夊叧浜庡鏁扮殑杩愮畻浠庡彉鎹㈢粨鏋滃彲浠ュ畬鍏ㄦ仮澶嶅師濮嬫暟鎹?绛旀: 鏈夐鍩熺殑姒傚康,鏈夊叧浜庡鏁扮殑杩愮畻,浠庡彉鎹㈢粨鏋滃彲浠ュ畬鍏ㄦ仮澶嶅師濮嬫暟鎹?4銆佸浘鍍忕殑鍑犱綍鍙樻崲鏀瑰彉鍥惧儚鐨勫ぇ灏忔垨褰㈢姸锛屼緥濡傦紙锛夛紵骞崇Щ鏃嬭浆缂╂斁閫€鍖?绛旀: 骞崇Щ,鏃嬭浆,缂╂斁5銆佸倕閲屽彾鍙樻崲寰楀埌鐨勯璋变腑锛岄珮棰戠郴鏁板搴斾簬鍥惧儚鐨勮竟缂橀儴鍒嗐€?瀵?閿?绛旀: 瀵?6銆佸浘鍍忓钩绉诲悗锛屽叾鍌呴噷鍙跺彉鎹㈢殑骞呭害鍜岀浉浣嶅潎淇濇寔涓嶅彉銆?瀵?閿?绛旀: 閿?绗笁绔?1銆佸浘鍍忎笌鍏剁伆搴︾洿鏂瑰浘闂寸殑瀵瑰簲鍏崇郴鏄紙锛夛紵涓€涓€瀵瑰簲澶氬涓€涓€瀵瑰閮戒笉瀵?绛旀:2銆佷笅鍒楃畻娉曚腑灞炰簬鐐瑰鐞嗙殑鏄紙锛夛紵姊害閿愬寲鐩存柟鍥惧潎琛″寲鍌呴噷鍙跺彉鎹?涓€兼护娉?绛旀:3銆佷负浜嗗幓闄ゅ浘鍍忎腑鏌愪竴棰戠巼鍒嗛噺锛岄櫎浜嗙敤甯﹂樆婊ゆ尝鍣ㄨ繕鍙互鐢紙锛夛紵浣庨€氭护娉㈠櫒楂橀€氭护娉㈠櫒甯﹂€氭护娉㈠櫒浣庨€氭护娉㈠櫒鍔犻珮閫氭护娉㈠櫒绛旀:4銆佽瀵瑰彈瀛ょ珛鍣0鐐瑰奖鍝嶇殑鍥惧儚杩涜骞虫粦婊ゆ尝锛屼笉鑳借揪鍒版晥鏋滅殑婊ゆ尝鍣ㄦ槸锛堬級锛?涓€兼护娉㈠櫒閭诲煙骞冲潎婊ゆ尝鍣?楂橀澧炲己婊ゆ尝鍣?绾挎€ч攼鍖栨护娉㈠櫒绛旀:5銆佸簲鐢ㄥ倕閲屽彾鍙樻崲鐨勫彲鍒嗙鎬у彲浠ユ妸鍥惧儚鐨勪簩缁村彉鎹㈠垎瑙d负琛屽拰鍒楁柟鍚戠殑涓€缁村彉鎹€?瀵?閿?绛旀:6銆佸熀浜庣┖鍩熺殑鍥惧儚澧炲己鏂规硶姣斿熀浜庨鍩熺殑澧炲己鏂规硶鐨勬晥鏋滆濂姐€?瀵?閿?绛旀:绗洓绔?1銆佸浘鍍忓鍘熶竴鑸鐭ラ亾鍥惧儚閫€鍖栫殑鏈虹悊鍜岃繃绋嬬殑鍏堥獙鐭ヨ瘑锛屽缓绔嬬浉搴旂殑锛堬級锛?閫€鍖栨ā鍨?鍣0妯″瀷绾挎€фā鍨?闈炵嚎鎬фā鍨?绛旀:2銆佺淮绾虫护娉㈡硶鎭㈠鍥惧儚锛屽叾鍓嶆彁鏉′欢涔嬩竴鏄浘鍍忎笌鍣0锛堬級锛?鐩稿叧涓嶇浉鍏?鍗风Н鐩稿绛旀:3銆佸紩璧峰浘鍍忛€€鍖栫殑鍥犵礌寰堝锛屼互涓嬪摢浜涗細寮曡捣鍥惧儚閫€鍖栵紵鎷嶆憚鏃剁浉鏈烘姈鍔?閬ユ劅鎷嶆憚鏃跺ぇ姘旀壈鍔?娣峰叆鍣0闀滃ご鐣稿彉绛旀:4銆侀€嗘护娉㈡硶鎭㈠鍥惧儚锛屽彲浠ラ€氳繃涓€瀹氱殑鏂规硶鏀瑰杽鎭㈠鍥惧儚鐨勮川閲忥紝鍏朵腑鍖呮嫭锛堬級锛?浼犻€掑嚱鏁帮紙鎸囩殑骞呭害閮ㄥ垎锛夌殑宄板€肩敤绯荤粺鍝嶅簲鐨勬渶灏忓€间唬鏇?灏嗕紶閫掑嚱鏁颁腑灏忎簬鏌愪釜鍊肩殑鎵€鏈夊€肩敤鏌愪釜涓嶄负闆剁殑甯告暟浠f浛淇濈暀浼犻€掑嚱鏁扮涓€涓胺涔嬪唴鐨勯儴鍒嗭紝鍏朵綑閮ㄥ垎鐢ㄦ煇涓笉涓洪浂鐨勫父鏁颁唬鏇?浼犻€掑嚱鏁扮殑鎵€鏈夊€肩敤鏌愪釜涓嶄负闆剁殑甯告暟浠f浛绛旀:5銆佸浘鍍忓鍘熺殑涓昏鐩殑鏄敖鍙兘鍦版仮澶嶈閫€鍖栦簡鐨勫浘鍍忕殑鏈潵闈㈢洰銆?瀵?閿?绛旀:6銆侀噰鐢ㄥ浘鍍忓鍘熸妧鏈彲浠ュ畬鍏ㄦ仮澶嶄竴骞呮ā绯婄殑鍥惧儚銆?瀵?閿?绛旀:绗簲绔?1銆佷笅闈㈡墍鍒楃紪鐮佹柟娉曚腑锛屽摢涓€绉嶆槸鍙橀暱缂栫爜锛?棰勬祴缂栫爜鍙樻崲缂栫爜鍝堝か鏇肩紪鐮?琛岀▼缂栫爜绛旀:2銆佸湪鍥惧儚鍘嬬缉缂栫爜鏂规硶涓紝涓€鑸拡瀵逛笁绉嶆暟鎹啑浣欙紝涓嬮潰鍥涚鏁版嵁鍐椾綑涓紝閭d竴绉嶄笉灞炰簬鍥惧儚鍘嬬缉缂栫爜澶勭悊鐨勬暟鎹啑浣欍€?缂栫爜鍐椾綑鍍忕礌闂村啑浣?淇℃簮缂栫爜鍐椾綑蹇冮噷瑙嗚鍐椾綑绛旀:3銆佸浘鍍忓帇缂╁張绉板浘鍍忕紪鐮侊紝灏辨槸瀵圭粰瀹氱殑淇℃伅锛屽敖閲忓噺灏戣〃杈捐繖浜涗俊鎭殑鏁版嵁閲忋€?瀵?閿?绛旀:4銆佸鏋滃湪缂栫爜鍥惧儚鐨勭伆搴︾骇鏃舵墍鐢ㄧ殑缂栫爜绗﹀彿鏁板浜庤〃绀烘瘡涓伆搴︾骇瀹為檯鎵€闇€鐨勭鍙锋暟锛屽垯鐢ㄨ繖绉嶇紪鐮佸緱鍒扮殑鍥惧儚涓寘鍚績閲岃瑙夊啑浣欍€?瀵?閿?绛旀:5銆佷笅闈㈡墍鍒楃紪鐮佹柟娉曚腑锛屽摢浜涘睘浜庢棤鎹熷帇缂╃紪鐮侊紵鍝堝か鏇肩紪鐮?绠楁湳缂栫爜琛岀▼缂栫爜鍙樻崲缂栫爜绛旀:绗叚绔?1銆佺洿鏂瑰浘闃堝€兼槸鍩轰簬鍗曠洰鏍囧浘鍍忕洿鏂瑰浘鐨勶紙聽聽锛夌幇璞°€?娉㈠姩澶氭璧蜂紡鍙屽嘲涓€璋?绛旀:2銆佸尯鍩熺敓闀挎槸涓€绉嶏紙聽聽锛夌殑鍒嗗壊鏂规硶銆?鑷笂鑰屼笅鑷笅鑰屼笂闅忔満鐨?绛旀:3銆侀€氬父鐢ㄤ竴闃跺井鍒嗙殑杩囬浂鐐规娴嬭竟缂樸€? 瀵?閿?绛旀:4銆佹媺鏅媺鏂畻瀛愭槸鏃犳柟鍚戠殑寰垎绠楀瓙銆? 瀵?閿?绛旀:5銆侀槇鍊煎彲鍒嗕负锛埪? 聽锛夊嚑绉嶃€?鍏ㄥ眬闃堝€煎拰灞€閮ㄩ槇鍊?鐩存帴闃堝€间笌闂存帴闃堝€?鐩存柟鍥鹃槇鍊煎拰鏈€浼橀槇鍊?鐪熼槇鍊煎拰鍋囬槇鍊?绛旀:6銆佸熀浜庤竟缂樼殑鍒嗗壊鏂规硶涓昏鏈夛紙聽聽锛? 鐩存柟鍥鹃槇鍊煎垎鍓?Hough鍙樻崲鍒嗚鍚堝苟涓€闃跺井鍒嗚竟缂樻娴嬪垎鍓?绛旀:绗竷绔?1銆佺煩褰㈠害鍙嶆槧浜嗙洰鏍囧鍏跺鎺ョ煩褰㈢殑鍏呮弧绋嬪害锛屽彲鐢ㄧ洰鏍囩殑闈㈢Н涓庡叾鏈€灏忓鎺ョ煩褰㈢殑闈㈢Н姣斿€兼潵鎻忚堪锛屽綋姣斿€间负1鏃讹紝璇存槑锛埪? 聽聽聽锛夈€?鐩爣涓哄渾褰?鐩爣涓洪暱鏂瑰舰鐩爣涓鸿彵褰?鐩爣涓轰笉瑙勫垯鐨?绛旀:2銆佸師鐐圭煩鍏锋湁锛堬級銆?骞崇Щ鍙樺寲鎬?灏哄害涓嶅彉鍖?鏃嬭浆涓嶅彉鍖?鍛ㄩ暱涓嶅彉鍖栨€?绛旀:3銆佸綊涓€鍖栫殑涓€闃跺樊鍒嗛摼鐮佸叿鏈夛紙锛夈€?骞崇Щ涓嶅彉鎬?鏃嬭浆涓嶅彉鎬?涓績璺濅笉鍙樻€?鍌呴噷鍙舵弿杩板瓙涓嶅彉鎬?绛旀:4銆佹棆杞悗鐨勫綊涓€鍖栫殑涓績鐭╁叿鏈夛紙锛夈€?骞崇Щ涓嶅彉鎬?灏哄害涓嶅彉鎬?閾剧爜涓嶅彉鎬?鏃嬭浆涓嶅彉鎬?绛旀:5銆佸湪鍌呴噷鍙舵弿杩版硶涓彇鍓峂涓倕閲屽彾绯绘暟杩涜鍙嶅彉鎹㈠彲浠ュ緱鍒拌竟鐣岀殑涓€涓暣浣撹疆寤撱€?瀵?閿?。
第10章图象处理编程工具及简单的多媒体编程在前九章,我们主要是介绍一些数字图象处理的基本原理和算法,很多细节和优化的算法都没有提,所以程序的通用性和效率并不理想。
其实有很多优秀的图象处理编程工具,功能强大,速度很快。
在实际的编程中,可以调用它们提供的功能来满足我们自己的需求,提高了编程效率和代码的正确性。
在这一章里,将介绍图象处理编程工具LeadTools(OCX)。
给出的例程中要用到Visual C++(以下简称VC)的AppWizard和MFC的一些特性,不熟悉C++的读者可以先看看相关的参考书。
10.1 LeadToolsLeadTools(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网址:/。
LeadTools主要有以下几大功能:(1)对显示设备的全面支持:在显示时,你的程序中无需考虑是哪种显示模式,如16色还是真彩色。
LeadTools为你做了所有的事。
当然你也可以通过设置参数获得对显示设备更多的控制。
你还可以实现自己的调色板。
(2)支持多种文件格式:表10.1是LeadTools所支持的常用文件格式,其中读表示用LeadTools能打开的文件格式,写表示LeatTools能存成的文件格式:以上只是常用的文件格式,除此以外还有很多其它的文件格式,感兴趣的读者可以参考帮助。
(3)图象处理:如二值化、平滑、加噪声、增加对比度、色调、饱和度、亮度、Gamma校正、中值滤波、半影调、抖动、橡皮筋、滚动、填充、反色、镜象、马赛克、浮雕、打印、扫描、拷贝、粘贴、裁剪、缩放、截屏、调色板、直方图、有关数据库的操作、还有制作幻灯的功能,如淡入、淡出、卷帘等等、真的很爽。
表10.2是Version5.1的所有属性、事件、和方法列表,看看有没有你所需要的功能。
以字母顺序排列,其中标[P]的表示只有专业级(Professional)和特殊级(Express)用户才能使用。
(4)源代码例子:LeadTools的帮助做的特别好,这一点非常吸引人。
每一个事件、方法、属性都有很详细的说明,后面都附有一个详细的例子。
而且例子有很多种版本,如VC版、VB版、Delphi版、Access版,这样使用不同编程语言的程序员都能从中获得直接的帮助。
好了,介绍了这么多LeadTools的功能,下面我们给出一个最简单的利用LeadTools例子,其功能是显示任意一幅图(当然是Lead能支持的文件格式),图被缩放成和控件一样大小。
[例子10.1] 用Lead显示一幅图步骤1:打开VC++5.0,用MFC AppWizard (exe)新建一个Project,起名为TestLead。
要注意的是在Step1中,选定"Dialog based",Step2中,选定"ActiveX Controls",其它过程全部采用缺省值。
步骤2:把Lead控件添加到工具条中,方法是:(1)打开Project->Add To Project->Components and Controls菜单(其它的VC版本,如4.0、4.1、4.2,为Insert->Component…菜单),出现对话框,选择“Registered ActiveX Controls”那个目录(其它的VC版本为”OLE Controls”那一页);(2)选中"Lead Std Control"那一项,如图10.1所示。
然后按下Insert菜单即可;图10.1 Lead控件图10.2工具条(3)如果没有该项,找到lead32.ocx文件所在的目录(一般为95的系统目录),选择该文件,按下Insert按钮即可(其它VC版本的操作方法是:按下Customize 菜单,出现一个新的对话框,按下Import菜单,找到lead32.ocx文件所在的目录,选择该文件,按下Import按钮,再按下OK按钮,然后做(2)所做的工作即可)。
按下Close按钮,关闭Component对话框。
插入该控件后,会出现一个对话框,提示你新增加了两个类:Clead和Cpicture,选择Ok。
打开对话框资源,选择ID 为IDD_TESTLEAD_DIALOG的对话框,这时可以看到该控件已经添加到工具条中,如图10.2所示。
步骤3:将Lead控件从工具条拖到对话框中,设置好合适的大小,右击该控件,选择Property菜单,设置其ID属性为IDC_LEAD1,删除“TODO: Place form controls on this dialog”的静态文本。
步骤4:按Ctrl+w,出现ClassWizard对话框,选择Member Variables那一页,为该ID添加一个变量m_Lead1,Category为Control,Variable Type为Clead。
步骤5:编辑TestLeadDlg.cpp文件中的OnInitDialog()函数,在// TODO: Add extra initialization here后加入如下的代码:m_Lead1.Load(“c:\\test.jpg”,0,0);m_Lead1.SetAutoScroll(TRUE);m_Lead1.SetDstRect(0,0,m_Lead1.GetScaleWidth(),m_Lead1.GetScaleHeight());m_Lead1.SetDstClipRect(0,0,m_Lead1.GetScaleWidth(),m_Lead1.GetScaleHeight());m_Lead1.SetAutoRepaint(FALSE);m_Lead1.ForceRepaint();步骤6:编译运行,结果如图10.3所示。
图10.3 例10.1的运行结果可以看到,使用了控件的编程是多么的简单。
更复杂的应用,读者可以参考帮助来完成,要注意的是,使用了LeadTools的应用程序一定要注意版权问题,另外,程序中如果用到了LeatTools的OCX,在制作安装程序(如用InstallShield)时一定要将OLE的信息进行注册,否则用户无法正常运行程序。
10.2 DirectDraw本节内容主要参考自微软公司的技术文档。
相信游戏玩家对DirectX这个词并不陌生。
最近有越来越多的游戏用到了DirectX。
那么DirectX究竟是什么呢?在Windows3.x的时代,由于Microsoft提供的Windows API不能对硬件直接操作,使得Windows3.x下的游戏不仅效果差,而且运行速度极慢。
而DOS4GW 有很多很好的性能,例如:可对硬件直接操作;访问超过16比特大小的内存区;可对保护模式编程等等,使得大部分游戏是在DOS4GW下利用如WATCOMC 一类的开发工具编制的,如老版本的《仙剑奇侠传》。
为了吸引游戏商到Windows 平台上来,Microsoft专门开发了Windows的游戏接口WinG,然而效果并不理想。
在推出Windows95之后,Microsoft又开发了该平台的GAME SDK,这就是DirectX。
DirectX是非常成功的,很多优秀的游戏都又从DOS平台移植到Windows95平台,《仙剑奇侠传》出了Win95版本,Red Alert, Diablo,以及最近十分流行的Age of Empire,都用到了DirectX。
DirectX技术的最大特点是能直接对硬件抽象层(HAL)操作,实现视频、声音的输出、网络相互通信,特别能对游戏杆直接编程。
与传统的GDI和MCI相比,不仅大大加快了速度,而且大大地提高了游戏的质量,有人甚至已将DirectX 称为Windows95的GAME OS。
目前的最新版DirectX5.0 SDK包括DirectDraw、DirectSound、DirectPlay、Direct3D、DirectInput、DirectSetup六个部分。
其中DirectDraw管理游戏的视频输出,DirectSound管理游戏的声音输出,DirectPlay 管理游戏的网络通信,Direct3D管理游戏的三维图形,DirectInput管理游戏的游戏杆控制,DirectSetup管理游戏的安装。
因为本书的题目是图象处理编程,我们这里只介绍DirectDraw的大致原理。
有的读者可能会说:“跑题了,图象处理编程和编游戏有什么关系?”其实DirectDraw并不只是用在游戏中,由于它的显示处理速度快,在很多和视频有关的软件中(比如说Mpeg的解码器)都可以用到。
DirectDraw是为速度而设计的,它绕过与Windows的图形设备相连的多个层次,直接与硬件的底层打交道。