?? surface.htm
字號:
FACE="宋體" size="3" color="#FFFFFF">ddsd.dwHeight = 10; </font></p>
<p style="background-color: rgb(0,0,128); margin-top: 0; margin-bottom: 0; padding-top: 2"><font
FACE="宋體" size="3" color="#FFFFFF">//創建頁面,該頁面使用IDirectDrawSurface接口</font></p>
<p style="background-color: rgb(0,0,128); margin-top: 0; margin-bottom: 0; padding-top: 2"><font
FACE="宋體" size="3" color="#FFFFFF">ddrval = lpDD2->CreateSurface(&ddsd,
&lpSurf, NULL); </font></p>
<p style="background-color: rgb(0,0,128); margin-top: 0; margin-bottom: 0; padding-top: 2"><font
FACE="宋體" size="3" color="#FFFFFF">if(ddrval != DD_OK) </font></p>
<p style="background-color: rgb(0,0,128); margin-top: 0; margin-bottom: 0; padding-top: 2"><font
FACE="宋體" size="3" color="#FFFFFF">return; </font></p>
<p style="background-color: rgb(0,0,128); margin-top: 0; margin-bottom: 0; padding-top: 2"><font
FACE="宋體" size="3" color="#FFFFFF">//詢問IDirectDrawSurface3接口</font></p>
<p style="background-color: rgb(0,0,128); margin-top: 0; margin-bottom: 0; padding-top: 2"><font
FACE="宋體" size="3" color="#FFFFFF">ddrval = lpSurf->QueryInterface(
IID_IDirectDrawSurface3, (LPVOID *)&lpSurf2); </font></p>
<p style="background-color: rgb(0,0,128); margin-top: 0; margin-bottom: 0; padding-top: 2"><font
FACE="宋體" size="3" color="#FFFFFF">if(ddrval != DD_OK) </font></p>
<p style="background-color: rgb(0,0,128); margin-top: 0; margin-bottom: 0; padding-top: 2"><font
FACE="宋體" size="3" color="#FFFFFF">return; </font></p>
<p style="background-color: rgb(0,0,128); margin-top: 0; margin-bottom: 0; padding-top: 2"><font
FACE="宋體" size="3" color="#FFFFFF">//調用IDirectDrawSurface3接口特有的函數</font></p>
<p style="background-color: rgb(0,0,128); margin-top: 0; margin-bottom: 0; padding-top: 2"><font
FACE="宋體" size="3" color="#FFFFFF">ddrval = lpSurf2->PageLock(0); </font></p>
<p style="background-color: rgb(0,0,128); margin-top: 0; margin-bottom: 0; padding-top: 2"><font
FACE="宋體" size="3" color="#FFFFFF">if(ddrval != DD_OK) </font></p>
<p style="background-color: rgb(0,0,128); margin-top: 0; margin-bottom: 0; padding-top: 2"><font
FACE="宋體" size="3" color="#FFFFFF">return; </font></p>
<p style="background-color: rgb(0,0,128); margin-top: 0; margin-bottom: 0; padding-top: 2"><font
FACE="宋體" size="3" color="#FFFFFF">ddrval = lpSurf2->PageUnlock(0); </font></p>
<p style="background-color: rgb(0,0,128); margin-top: 0; margin-bottom: 0; padding-top: 2"><font
FACE="宋體" size="3" color="#FFFFFF">if(ddrval != DD_OK) </font></p>
<p style="background-color: rgb(0,0,128); margin-top: 0; margin-bottom: 0; padding-top: 2"><font
FACE="宋體" size="3" color="#FFFFFF">return; </font></p>
<font FACE="宋體" size="4"><p ALIGN="JUSTIFY"></font> </p>
<p ALIGN="JUSTIFY">上面的例子通過調用<font FACE="Arial" SIZE="3">QueryInterface</font>函數(指定<font
FACE="Arial" SIZE="3">IID_IDirectDraw2</font>引用標志符)獲得一個<font
FACE="Arial" SIZE="3">DirectDrawSurface</font>對象的<font FACE="Arial" SIZE="3">IDirectDrawSurface3</font>接口。要得到<font
FACE="Arial" SIZE="3">IDirectDrawSurface3</font>接口,使用<font FACE="Arial" SIZE="3">IID_IDirectDrawSurface3</font>引用標志符即可。</p>
<hr>
</ol>
<b><p></font><font FACE="黑體" SIZE="3">3、<a
name="寬度(Width)和寬距(Pitch)">寬度(</font><font FACE="宋體" SIZE="3"><font
FACE="Arial" SIZE="3">Width</font><font FACE="黑體" SIZE="3">)和寬距(</font><font
FACE="Arial" SIZE="3">Pitch</font><font FACE="黑體" SIZE="3">)</a></p>
</font></b><font SIZE="3"><p align="right"></font><a href="#目錄">返回目錄</a></p>
<ol>
<p ALIGN="JUSTIFY">如果你的應用程序要寫視頻<font FACE="Arial" SIZE="3">RAM</font>,內存中的位圖并不需要占據連續的內存塊。在這種情況下,一條線的<font
FACE="Arial" SIZE="3">width</font>和<font FACE="Arial" SIZE="3">pitch</font>含義是不同的。<font
FACE="Arial" SIZE="3">width</font>是指內存中位圖的一條線的開始和結束位置的內存地址之差。這個距離只代表了內存中位圖的寬度,它不包括位圖中到達下一條線開始位置所需要的任何額外的內存。<font
FACE="Arial" SIZE="3">pitch</font>是指內存中位圖的一條線到下一條線開始位置的內存地址之差。
</p>
<p ALIGN="JUSTIFY">對矩形內存來說,比如,視頻<font FACE="Arial" SIZE="3">RAM</font>的<font
FACE="Arial" SIZE="3">pitch</font>將包括位圖的寬度加上一部分緩存。下面的例圖表示了矩形內存中<font
FACE="Arial" SIZE="3">width</font>和<font FACE="Arial" SIZE="3">pitch</font>的區別。</p>
<p ALIGN="JUSTIFY">在這個例圖中,前臺緩存和后臺緩存大小都是<font
FACE="Arial" SIZE="3">640x480x8</font>,高速緩存是<font FACE="Arial" SIZE="3">384x480x8</font>。要到達下一條線的地址,你必須在<font
FACE="Arial" SIZE="3">640</font>后加上<font FACE="Arial" SIZE="3">384</font>,得到<font
FACE="Arial" SIZE="3">1024</font>,這就是下一條線的地址。</p>
<p ALIGN="JUSTIFY">因此,當直接向頁面內存中著色時,一般用<font
FACE="Arial" SIZE="3">IDirectDrawSurface3::Lock</font>(或<font FACE="Arial" SIZE="3">IDirectDrawSurface3::GetDC</font>)方法返回的<font
FACE="Arial" SIZE="3">pitch</font>值。不要認為<font FACE="Arial" SIZE="3">pitch</font>只是基于顯示模式的。如果你的應用程序在某些顯示器上發生顯示混亂,這多半是因為<font
FACE="Arial" SIZE="3">pitch</font>使用錯誤造成的。 <font FACE="Arial" SIZE="3"></p>
</font><hr>
</ol>
<b><p></font><font FACE="黑體" SIZE="3">4、<a name="關鍵色">關鍵色</a></p>
</font></b><font SIZE="3"><p align="right"></font><a href="#目錄"><font FACE="宋體"
SIZE="3">返回目錄</font></a></p>
<font FACE="宋體" SIZE="3"><ol>
<font FACE="Arial" SIZE="3"><p ALIGN="JUSTIFY">DirectDraw</font>支持帶源或目標關鍵色的<font
FACE="Arial" SIZE="3">Blit</font>操作和覆蓋頁面。這個關鍵色可以是單個的顏色值,也可以是一個顏色范圍。要得到關于關鍵色的詳細介紹,請參閱前一章的“關鍵色”一節。通過調用<font
FACE="Arial" SIZE="3">IDirectDrawSurface3::SetColorKey</font>函數,可以為一個頁面設置一個關鍵色。</p>
<p ALIGN="JUSTIFY">源關鍵色(<font FACE="Arial" SIZE="3">Source color key</font>)指定了一個顏色或一個顏色范圍,在<font
FACE="Arial" SIZE="3">Blit</font>過程中,不被復制,或在覆蓋頁面中,對目標層來說是不可見的。目標關鍵色(<font
FACE="Arial" SIZE="3">Destination color key</font>)指定了一個顏色或一個顏色范圍,在<font
FACE="Arial" SIZE="3">Blit</font>過程中,將被替換,或在覆蓋頁面中,將被目標層所覆蓋。源與目標關鍵色的一個顯著的區別就是:源關鍵色指定了在源頁面上什么是可以讀和什么是不可以讀的;目標關鍵色指定了在目標頁面上,什么是可以寫和什么是不可以寫的。如果目標頁面有關鍵色,則只有那些符合關鍵色的像素可以被改變(在<font
FACE="Arial" SIZE="3">Blit</font>操作中),或被覆蓋(在覆蓋頁面中)。</p>
<p ALIGN="JUSTIFY">除了與<font FACE="Arial" SIZE="3">Blit</font>相關的關鍵色之外,覆蓋頁面還可以使用覆蓋關鍵色。要得到更多信息,請參閱“覆蓋關鍵色”。</p>
<p ALIGN="JUSTIFY">有些硬件只支持<font FACE="Arial" SIZE="3">YUV</font>像素數據的顏色范圍。<font
FACE="Arial" SIZE="3">YUV</font>數據通常用于視頻顯示的像素格式,并且其透明背景不是一個特定顏色而導致在數值轉換過程中發生錯誤。所以,只要可能,就應該將數據寫到一個特定的透明顏色上,而不管它是什么像素格式。</p>
<p ALIGN="JUSTIFY">關鍵色是按頁面的像素格式指定的。如果一個頁面是調色板格式,關鍵色是以一個調色板索引或一組調色板索引指定的。如果頁面的像素格式是按<font
FACE="Arial" SIZE="3">FOURCC</font>代碼指定的,描述了一個<font FACE="Arial"
SIZE="3">YUV</font>格式,<font FACE="Arial" SIZE="3">YUV</font>關鍵色是由<font
FACE="Arial" SIZE="3">DDCOLORKEY</font>結構的<font FACE="Arial" SIZE="3">dwColorSpaceLowValue
</font>和<font FACE="Arial" SIZE="3">dwColorSpaceHighValue</font>成員的低三位字節指定的。最低的字節包含<font
FACE="Arial" SIZE="3">V</font>數據,下一個包含<font FACE="Arial" SIZE="3">U</font>數據,第三個包含<font
FACE="Arial" SIZE="3">Y</font>數據。<font FACE="Arial" SIZE="3">IDirectDrawSurface3::SetColorKey</font>的<font
FACE="Arial" SIZE="3">dwFlags</font>參數指定了關鍵色是用在<font FACE="Arial"
SIZE="3">Blit</font>操作中還是覆蓋頁面中,以及它是源還是目標關鍵色。以下是一些合法的關鍵色的例子。</p>
<font FACE="Arial" SIZE="3"><p ALIGN="JUSTIFY"
style="background-color: rgb(0,0,128); margin-top: 0; margin-bottom: 0; padding-top: 2"></font><font
FACE="宋體" color="#FFFFFF" size="3">8位調色板模式:</font></p>
<p style="background-color: rgb(0,0,128); margin-top: 0; margin-bottom: 0; padding-top: 2"><font
FACE="宋體" color="#FFFFFF" size="3">//調色板登錄項26是關鍵色。</font></p>
<p style="background-color: rgb(0,0,128); margin-top: 0; margin-bottom: 0; padding-top: 2"><font
FACE="宋體" color="#FFFFFF" size="3">dwColorSpaceLowValue = 26;</font></p>
<p style="background-color: rgb(0,0,128); margin-top: 0; margin-bottom: 0; padding-top: 2"><font
FACE="宋體" color="#FFFFFF" size="3">dwColorSpaceHighValue = 26;</font></p>
<p ALIGN="JUSTIFY"
style="background-color: rgb(0,0,128); margin-top: 0; margin-bottom: 0; padding-top: 2"><font
FACE="宋體" color="#FFFFFF" size="3">24位真彩模式:</font></p>
<p style="background-color: rgb(0,0,128); margin-top: 0; margin-bottom: 0; padding-top: 2"><font
FACE="宋體" color="#FFFFFF" size="3">//(255,128,128)顏色是關鍵色</font></p>
<p style="background-color: rgb(0,0,128); margin-top: 0; margin-bottom: 0; padding-top: 2"><font
FACE="宋體" color="#FFFFFF" size="3">dwColorSpaceLowValue = RGBQUAD(255,128,128);</font></p>
<p style="background-color: rgb(0,0,128); margin-top: 0; margin-bottom: 0; padding-top: 2"><font
FACE="宋體" color="#FFFFFF" size="3">dwColorSpaceHighValue = RGBQUAD(255,128,128);</font></p>
<p ALIGN="JUSTIFY"
style="background-color: rgb(0,0,128); margin-top: 0; margin-bottom: 0; padding-top: 2"><font
FACE="宋體" color="#FFFFFF" size="3">FourCC YUV模式:</font></p>
<p style="background-color: rgb(0,0,128); margin-top: 0; margin-bottom: 0; padding-top: 2"><font
FACE="宋體" color="#FFFFFF" size="3">//只要Y在100和110之間,并且U或V在50和55之間的的任何一個YUV顏色為透明。</font></p>
<p style="background-color: rgb(0,0,128); margin-top: 0; margin-bottom: 0; padding-top: 2"><font
FACE="宋體" color="#FFFFFF" size="3">dwColorSpaceLowValue = YUVQUAD(100,50,50);</font></p>
<p style="background-color: rgb(0,0,128); margin-top: 0; margin-bottom: 0; padding-top: 2"><font
FACE="宋體" color="#FFFFFF" size="3">dwColorSpaceHighValue = YUVQUAD(110,55,55);</font></p>
</ol>
<hr>
<p></font><b><font FACE="黑體" SIZE="3">5、<a name="像素格式">像素格式</a></font><font
FACE="宋體" SIZE="3"></p>
</b><font SIZE="3"><p align="right"></font><a href="#目錄">返回目錄</a></p>
</blockquote>
<blockquote>
<blockquote>
<p ALIGN="JUSTIFY">像素格式規定了頁面內存中的每個像素的數據是怎樣進行編碼的。<font
FACE="Arial" SIZE="3">DirectDraw</font>使用<font FACE="Arial" SIZE="3">DDPIXELFORMAT</font>結構來描述各式各樣的像素格式(請參閱“<font
FACE="Arial" SIZE="3">DirectDraw</font>參考手冊中關于該結構的幫助”)。<font
FACE="Arial" SIZE="3">DDPIXELFORMAT</font>結構中的成員包含了各種像素格式相互區別的以下幾個顯著的特點:</p>
</blockquote>
</blockquote>
<blockquote>
<blockquote>
<ul>
<li>像素格式是基于調色板的還是非調色板式的</li>
<li>如果是非調色板式,像素是<font FACE="Arial" SIZE="3">RGB</font>,還是<font
FACE="Arial" SIZE="3">YUV</font>格式</li>
<li>位深度</li>
<li>位掩碼</li>
</ul>
</blockquote>
</blockquote>
<blockquote>
<blockquote>
<p ALIGN="JUSTIFY">通過調用<font FACE="Arial" SIZE="3">IDirectDrawSurface3::GetPixelFormat</font>函數,你可以獲得關于當前頁面的像素格式的信息。</p>
</blockquote>
<hr>
</blockquote>
<blockquote>
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -