?? ddbase.htm
字號:
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=gb2312">
<title>DirectDraw基本圖形概念</title>
<meta name="GENERATOR" content="Microsoft FrontPage 3.0">
</head>
<body background="paper.GIF">
<b><font FACE="Arial" SIZE="4">
<p ALIGN="CENTER"></font><a name="目錄"><font color="#FF8000"><font FACE="Arial"
size="6">DirectDraw</font><font FACE="宋體" size="6">基本圖形概念</font></font></a></b><font
FACE="宋體" size="5"></p>
</font>
<blockquote>
<p align="right" style="margin-top: -10; margin-bottom: -8"><a href="index.htm"
style="text-decoration: none"><span style="text-decoration: none">返回上級</span></a></p>
<hr>
</blockquote>
<font face="宋體" size="3">
<blockquote>
<p ALIGN="JUSTIFY"></font><font face="宋體"><span style="font-size: 12">
在上一章里,我們嘗試了一個非常簡單的DirectDraw應(yīng)用程序,可以看到,DirectDraw編程對一個C或C++程序員來說并不是陌生和難以接近的。在這一章里,我們將介紹Directdraw編程中所經(jīng)常用到的圖形方面的知識,在深入進行DirectDraw編程之前,領(lǐng)悟這些最基本的圖形概念是非常必要的。</span></font></p>
<table border="0" width="83%" height="196" cellspacing="4" cellpadding="4">
<tr>
<td width="50%" height="168" valign="top"><font face="宋體"><span
style="font-family: 宋體">1、<a href="#1、像素(Pixel)和分辨率(Resolution)">像素和分辨率</a></span></font><p><font
face="宋體"><span style="font-family: 宋體">2、<a href="#2、RGB色彩">RGB色彩</a></span></font></p>
<p><font face="宋體"><span style="font-family: 宋體">3、<a
href="#3、設(shè)備無關(guān)位圖(DIB)">設(shè)備無關(guān)位圖(DIB)</a></span></font></p>
<p><font face="宋體"><span style="font-family: 宋體">4、<a
href="#4、位深度(Bit depth)">位深度(Bit depth)</a></span></font></p>
<p><font face="宋體"><span style="font-family: 宋體">5、<a
href="#5、抖動處理(Dithering)">抖動處理(Dithering)</a></span></font></p>
<p><font face="宋體"><span style="font-family: 宋體">6、<a
href="#6、調(diào)色板(Palette)">調(diào)色板(Palette)</a></span></font></p>
<p><font face="宋體"><span style="font-family: 宋體">7、<a
href="#7、GDI與DirectDraw">GDI與DirectDraw</a></span></font></td>
<td width="50%" height="168" valign="top"><font face="宋體"><span
style="font-family: 宋體">8、<a href="#8、位塊傳送(Blit)">位塊傳送(Blit)</a></span></font><p><font
face="宋體"><span style="font-family: 宋體">9、<a
href="#9、翻頁(Page flipping)">翻頁(Page flipping)</a></span></font></p>
<p><font face="宋體"><span style="font-family: 宋體">10、<a
href="#10、矩形(Rectangle)">矩形(Rectangle)</a></span></font></p>
<p><font face="宋體"><span style="font-family: 宋體">11、<a
href="#11、精靈動畫(Sprite animation)">精靈動畫(Sprite animation)</a></span></font></p>
<p><font face="宋體"><span style="font-family: 宋體">12、<a
href="#12、關(guān)鍵色(Color Key)">關(guān)鍵色(Color Key)</a></span></font></p>
<p><font face="宋體"><span style="font-family: 宋體">13、<a
href="#13、補?。≒atching)">補丁(Patching)</a></span></font></p>
<p><font face="宋體"><span style="font-family: 宋體">14、<a
href="#14、范圍檢查(Bounds Checking)與碰撞檢測(Hit Detection)">范圍檢查與碰撞檢測</a></span></font></td>
</tr>
</table>
<hr>
</blockquote>
<blockquote>
<b><p><a name="1、像素(Pixel)和分辨率(Resolution)">1、像素<font FACE="Arial">(Pixel)</font><font
face="宋體">和分辨率(</font><font FACE="Arial">Resolution)</a></p>
</font></b><p align="right"><font size="3"><a href="#目錄">返回目錄</a></font><font
FACE="宋體" SIZE="3"></p>
</blockquote>
<blockquote>
<p ALIGN="JUSTIFY">首先,讓我們從電腦顯示器屏幕上的基本單位棗像素說起。對用戶來說,像素指的是顯示器在某種分辨率狀態(tài)下所能表達圖象的最小單位。你可以把它簡單的理解為一種類似于馬賽克的東西。像素的大小與你當前的顯示分辨率有關(guān),現(xiàn)在所有的<font
FACE="Arial" SIZE="3">SVGA</font>顯示器都支持多種分辨率,比如通常所說的<font
FACE="Arial" SIZE="3">640x480</font>、<font FACE="Arial" SIZE="3">800x600</font>等。許多人錯誤的將像素的大小與顯示器的點間距(<font
FACE="Arial" SIZE="3">Dot Pinch</font>)混淆了,其實它們指的不是同一個東西。當你用放大鏡觀察顯示器屏幕時,你會發(fā)現(xiàn)圖象實際是由許許多多紅,綠,藍整齊排列的小點組成,你可能會認為這就是像素,那么你就錯了。這實際上是顯示器光柵的一個掃描點,它是熒光屏后部的三束電子槍發(fā)射電子透過一層致密的網(wǎng)打到熒屏反面而發(fā)出的熒光,人們常說的<font
FACE="Arial" SIZE="3">0.28</font>的彩顯意即:屏幕上相臨兩個掃描點的平均間距為<font
FACE="Arial" SIZE="3">0.28</font>毫米。一個像素是由若干個這樣的掃描點組成的。專業(yè)的說,在某種分辨率狀態(tài)下,顯示器的水平(垂直)像素的個數(shù),實際上等于一次水平(垂直)掃描期間,電子束的通短強弱狀態(tài)能夠發(fā)生變化的次數(shù)。一臺彩顯所能達到的最大分辨率受到這臺彩顯的尺寸和點距的限制。</p>
</blockquote>
<blockquote>
<p ALIGN="JUSTIFY">顯然,顯示器型號越大,點間距越小,則它所能達到的分辨率就越高,那么,它所顯示的圖象就越清晰,表現(xiàn)得越細膩。</p>
<hr>
</blockquote>
<blockquote>
<b><p></font><a name="2、RGB色彩"><font FACE="Arial" SIZE="3">2</font><font size="3">、</font><font
FACE="Arial" SIZE="3">RGB</font><font FACE="宋體" SIZE="3"><font FACE="宋體">色彩</a></p>
</font></b><p align="right"><font size="3"><a href="#目錄">返回目錄</a></font></p>
</blockquote>
<blockquote>
<p ALIGN="JUSTIFY">現(xiàn)實生活中,我們所能分辨的所有顏色都能用三原色:紅、綠、藍合成出來,稱為<font
FACE="Arial" SIZE="3">RGB</font>色彩模式。用<font FACE="Arial" SIZE="3">RGB</font>方式合成顏色主要用于發(fā)光設(shè)備,如計算機顯示器。通過分別調(diào)節(jié)紅,綠,藍三束電子槍的強度,就可產(chǎn)生一個廣泛的色彩范圍。由于色彩的產(chǎn)生來源于<font
FACE="Arial" SIZE="3">RGB</font>三種色彩光強度的疊加,所以,這種方法被稱為彩色疊加。</p>
</blockquote>
<blockquote>
<p ALIGN="JUSTIFY">值得一提但與我們的<font FACE="Arial" SIZE="3">DirectDraw</font>編程基本上沒有什么關(guān)系的另一種色彩表示模式是<font
FACE="Arial" SIZE="3">CMYK</font>色彩模式,代表青,粉,黃三種可減基色,加上黑色作對比,常用于打印,感光材料,膠片等。每種基本色從照射到打印頁的白光中吸取某些色彩,由于<font
FACE="Arial" SIZE="3">CMYK</font>方式通過從白光中吸取特定的色彩,所以被稱為彩色削減。此外,還有<font
FACE="Arial" SIZE="3">HSI</font>(也稱<font FACE="Arial" SIZE="3">HSL)</font>色彩模式,它代表<font
FACE="Arial" SIZE="3">Hue </font>,<font size="3"> </font><font FACE="Arial" SIZE="3">Saturation
</font>和<font size="3"> </font><font FACE="Arial" SIZE="3">Intensity </font>。<font
FACE="Arial" SIZE="3">Hue </font>是我們所認為的色調(diào),如紅橙黃綠青藍紫等,<font
FACE="Arial" SIZE="3">Saturation</font>描述該色調(diào)顏色的飽和度,<font
FACE="Arial" SIZE="3">Intensity </font>描述亮度。</p>
</blockquote>
<blockquote>
<font FACE="Arial" SIZE="3"><p ALIGN="JUSTIFY">RGB </font>顏色方式對于顯示器來說是唯一適用的彩色混合方法,而<font
FACE="Arial" SIZE="3">CMYK</font>則是適用于打印和印刷的彩色混合方法,<font
FACE="Arial" SIZE="3">HSI </font>則是一個很直觀的定義彩色的方法?,F(xiàn)在的許多圖形軟件中都同時具有這三種定義顏色方法的應(yīng)用。但是,不論用那種方法給顏色取值,最終都必須轉(zhuǎn)化為<font
FACE="Arial" SIZE="3">RGB</font>方式才能為顯示器所認識接收并顯示出來。</p>
</blockquote>
</font>
<blockquote>
<font FACE="宋體" SIZE="3"><p ALIGN="JUSTIFY">在幾乎所有的編程中,當然也包括<font
FACE="Arial" SIZE="3">DirectDraw</font>,都是采用標準的<font FACE="Arial" SIZE="3">24</font>位<font
FACE="Arial" SIZE="3">RGB</font>模式定義一個顏色,用三個從<font FACE="Arial"
SIZE="3">0</font>到<font FACE="Arial" SIZE="3">255</font>的數(shù)值來分別代表<font
FACE="Arial" SIZE="3">R</font>、<font FACE="Arial" SIZE="3">G</font>、<font FACE="Arial"
SIZE="3">B</font>三個分量,每個分量都有<font FACE="Arial" SIZE="3">256</font>種亮度級別。當三種元素全被置為<font
FACE="Arial" SIZE="3">0</font>,像素顯示黑,通常表示為<font FACE="Arial"
SIZE="3">RGB(0</font>,<font FACE="Arial" SIZE="3">0</font>,<font FACE="Arial" SIZE="3">0)</font>;當全部置為<font
FACE="Arial" SIZE="3">255</font>,像素顯示為白,表示為<font FACE="Arial"
SIZE="3">RGB(255</font>,<font FACE="Arial" SIZE="3">255</font>,<font FACE="Arial"
SIZE="3">255)</font>。</p>
<hr>
<b><p><a name="3、設(shè)備無關(guān)位圖(DIB)">3、設(shè)備無關(guān)位圖(<font
FACE="Arial">DIB</font><font FACE="宋體">)</font></a></b></p>
<p align="right"></font><font size="3"><a href="#目錄">返回目錄</a></font><font
FACE="宋體" SIZE="3"></p>
</font>
</blockquote>
<blockquote>
<font FACE="宋體" SIZE="3"><p ALIGN="JUSTIFY">位圖圖象(也稱點陣圖象)準確的說是什么呢?它們是數(shù)據(jù)元素的集合,這些數(shù)據(jù)元素決定在了在圖片的某個具體位置是什么顏色。這就好比我們用許許多多的馬賽克來拼圖案一樣,每個馬賽克雖然只有一種顏色,但你看到的只是整個美麗的圖案,而不是某一個馬賽克。當圖象顯示在顯示器屏幕上時,正如前面提到的那樣,這一個個的馬賽克就是像素。</font><font
FACE="Arial" SIZE="3"></p>
</font>
</blockquote>
<blockquote>
<font FACE="Arial" SIZE="3"><p ALIGN="JUSTIFY">Windows</font><font FACE="宋體" SIZE="3">中,當然還包括</font><font
FACE="Arial" SIZE="3">DirectX</font><font FACE="宋體" SIZE="3">,都使用設(shè)備無關(guān)位圖</font><font
FACE="Arial" SIZE="3">DIB</font><font FACE="宋體" SIZE="3">(</font><font FACE="Arial"
SIZE="3">Device-Independent Bitmap</font><font FACE="宋體" SIZE="3">)作為其最基本的圖象文件格式。</p>
</font>
</blockquote>
<blockquote>
<font FACE="宋體" SIZE="3"><ul>
<li><font color="#FF0000">之所以稱之為設(shè)備無關(guān)位圖(DIB),其實是為了與設(shè)備相關(guān)位圖(DDB:Device
dependent bitmap)相區(qū)別。由于只有Windows 3.0以前的版本才廣泛使用設(shè)備相關(guān)位圖DDB,Windows
95和Windows NT及以后的版本使用的都是設(shè)備無關(guān)位圖DIB,所以,“設(shè)備無關(guān)位圖”這個名稱在當前已沒有其現(xiàn)實的含義。在大多數(shù)情況下,我們將其簡稱為位圖(Bitmap)。</font></li>
</ul>
</font>
</blockquote>
<blockquote>
<font FACE="宋體" SIZE="3"><p ALIGN="JUSTIFY">從本質(zhì)上說,</font><font
FACE="Arial" SIZE="3">DIB</font><font FACE="宋體" SIZE="3">是一個包含了圖象的各種信息的文件,包括圖象的尺寸,使用的顏色個數(shù)及其顏色值,還有每個像素的顏色數(shù)據(jù)等。此外,一個</font><font
FACE="Arial" SIZE="3">DIB</font><font FACE="宋體" SIZE="3">中還包含了一些極少使用的參數(shù),象文件壓縮類型、重要顏色,還有圖象的物理維數(shù)等。</font><font
FACE="Arial" SIZE="3">DIB</font><font FACE="宋體" SIZE="3">文件通常具有“</font><font
FACE="Arial" SIZE="3">.bmp</font><font FACE="宋體" SIZE="3">”擴展名,偶爾也會將“</font><font
FACE="Arial" SIZE="3">.dib</font><font FACE="宋體" SIZE="3">”作為其擴展名。</font><font
FACE="Arial" SIZE="3"></p>
</font>
</blockquote>
<blockquote>
<font FACE="Arial" SIZE="3"><p ALIGN="JUSTIFY">Windows</font><font FACE="宋體" SIZE="3">對</font><font
FACE="Arial" SIZE="3">DIB</font><font FACE="宋體" SIZE="3">位圖有規(guī)定的格式,在我們學(xué)習(xí)了位深度和調(diào)色板的概念之后,對</font><font
FACE="Arial" SIZE="3">DIB</font><font FACE="宋體" SIZE="3">格式再做詳細的解釋。</p>
</font>
</blockquote>
<blockquote>
<font FACE="宋體" SIZE="3"><ul>
<li><font color="#FF0000">與位圖格式相對的是矢量格式,由于它是用形狀和相互關(guān)系來描述圖象,WMF文件就是一種典型的矢量圖,它的特點是具有極大的靈活性,可以任意縮放不失真,且存儲空間相對較小,但矢量圖由于其描述圖象的方式與位圖完全不同,不適用于圖象處理的領(lǐng)域。在以后的DirectDraw編程中,我們所指的圖象特指位圖圖象。</font></li>
</ul>
<hr>
</font>
</blockquote>
<blockquote>
<b><font face="宋體"><font FACE="宋體" SIZE="3"><p></font><a
name="4、位深度(Bit depth)"><font size="3">4<font face="宋體">、</font></font></font><font
FACE="宋體" SIZE="3">位深度(<font FACE="Arial">Bit depth</font><font face="宋體">)</a></p>
</font></b><p align="right"></font><font size="3"><a href="#目錄">返回目錄</a></font><font
FACE="宋體" SIZE="3"></p>
?? 快捷鍵說明
復(fù)制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -