日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

Overlay Surfaces (覆盖表面)

發(fā)布時間:2023/12/9 编程问答 41 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Overlay Surfaces (覆盖表面) 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.
覆蓋表面(Overlay Surfaces) 覆蓋表面是具有特殊硬件支持能力的表面,通常用于顯示活動視頻、錄制視頻或靜止位圖而不需要位塊傳輸?shù)街鞅砻婊蚋淖冎鞅砻娴膬?nèi)容。對覆蓋表面的字此完全由硬件提供,DirectDraw支持顯示設(shè)備驅(qū)動程序所支持的特性,DirectDraw不仿真覆蓋表面。可以將覆蓋表面想象為一片塑料紙,我們可以在這片塑料上畫圖并可將其放置在顯示器前面。塑料紙覆蓋在顯示器前面時,你可以看到覆蓋和主表面,移去塑 料紙后,主表面并沒有改變。覆蓋表面的工作原理同透明塑料紙覆蓋的原理很相似。的顯示一個覆蓋表面時,就是告訴設(shè)備驅(qū)動程序在哪里怎樣使覆蓋表面可見。當(dāng)顯示設(shè)備掃描線重畫到顯示器上時,它檢查主表面上的每一個像素,看是否被覆蓋所代替。如果是,顯示設(shè)備就從覆蓋表面中抽取相關(guān)像素的數(shù)據(jù)替代。 使用這種方法,顯示適配卡在顯示器上生成主表面和覆蓋表面的合成表面,產(chǎn)生透明和拉伸效果而不需要改變每個表面的內(nèi)容。合成表面被送入視頻數(shù)據(jù)流直接送到顯示器。因為這種處理和像素替代是硬件級的操作,所以不存在明顯的性能損失。另外,這種方法還使得能夠用不同的像素格式無縫地合成主表面和覆蓋表面。創(chuàng)建覆蓋表面需要在DDSCAPS結(jié)構(gòu)中指定DDSCAPS_OVERLAY標(biāo)志,然后調(diào)用IDirectDraw2::CreateSurface方法覆蓋表面只能在支配內(nèi)存中創(chuàng)建,因此還必須包含DDSCAPS_VIDEOMEMORY標(biāo)志。同其他類型的表面一樣,通過包含合適的標(biāo)志,可以創(chuàng)建單一的覆蓋表面也可以創(chuàng)建由多個覆蓋組成的翻轉(zhuǎn)鏈。 你可以調(diào)用IDirectDraw2::GetCaps方法來獲取有關(guān)支持的覆蓋特性的信息。該方法用描述所有的特性信息填充一個DDCAPS結(jié)構(gòu)。在報告硬件特性時,設(shè)備驅(qū)動程序設(shè)置dwCaps成員的標(biāo)志來指明何時強(qiáng)制執(zhí)行硬件提供的某種類型的約束。獲得的驅(qū)動程序的能力后,通過檢查dwCaps成員的標(biāo)志可知道提供的約束的信息。DDCAPS結(jié)構(gòu)包含了9個成員,這9個成員描述了覆蓋表面的約束信息。下標(biāo)列出了同覆蓋相關(guān)的成員既它們的標(biāo)志。 成員 標(biāo)志 dwMaxVisibleOverlays 該成員始終有效 dwCurrVisibleOverlays 該成員始終有效 dwAlignBoundarySrc DDCAPS_ALIGNBOUNDARYSRC dwAlignSizeSrc DDCAPS_ALIGNSIZESRC dwAlignBoundaryDest DDCAPS_ALIGNBOUNDARYDESdwAlignSizeDest DDCAPS_ALIGNSIZEDEST dwMinOverlayStretch DDCAPS_OVERLAYSTRETCH dwMaxOverlayStretch DDCAPS_OVERLAYSTRETCH dwMaxVisibleOverlays和dwCurrVisibleOverlays成員指明了硬件可以顯示的覆蓋的最大數(shù)目,以及當(dāng)前有多少個可見。dwAlignBoundarySrc、dwAlignSizeSrc、dwAlignBoundaryDest、dwAlignSizeDest和dwAlignStrideAlign成員是硬件報告的矩形的位置和大小的約束。這些成員的值指明了在顯示覆蓋表面時如何確定源矩形和目的矩形的大小和位置。dwMinOverlayStretch和dwMaxOverlayStretch是有關(guān)拉伸因子的信息。 a、源矩形和目的矩形(Source and Destination Rectangles)要顯示一個覆蓋表面,需調(diào)用IDirectDrawSurface3::UpdateOverlay方法,在dwFlags參數(shù)中指定DDOVER_SHOW標(biāo)志。該方法要求你在lpSrcRect和lpDestRect參數(shù)中指定一個源矩形和目的矩形。若使用整個表面,將lpSrcRect參數(shù)設(shè)為NULL即可。目的矩形是在主表面上產(chǎn)生覆蓋表面的位置。 源、目的矩形不必大小相同。一般讓目的矩形必源矩形大一些或小一些都可以,硬件在顯示時會自動地壓縮或拉伸。要想成功地顯示一個覆蓋表面,可能需要調(diào)整源、目的矩形的大小和位置,這一過程是否必要依賴于設(shè)備驅(qū)動程序的限制。 b、邊界和大小調(diào)整(Boundary and Size Alignment) 由于不同硬件的限制,一些設(shè)備驅(qū)動程序?qū)τ糜陲@示覆蓋表面的源矩形和目的矩形的大小和位置做了約束。要找出設(shè)備應(yīng)用的約束,可調(diào)用IDirectDraw2::GetCaps方法,然后檢查DDCAPS結(jié)構(gòu)中同覆蓋相關(guān)的dwCaps成員的標(biāo)志。下標(biāo)列出了指定邊界和大小調(diào)整約束的成員和標(biāo)志。 類別 標(biāo)志 成員 邊界約束 DDCAPS_ALIGNBOUNDARYSRC dwAlignBoundarySrc DDCAPS_ALIGNBOUNDARYDEST dwAlignBoundaryDest 大小約束 DDCAPS_ALIGNSIZESRC dwAlignSizeSrc DDCAPS_ALIGNSIZEDEST dwAlignSizeDest 約束有兩種,邊界約束和大小約束。兩種約束都以像素的方式表示,并且能夠用于源矩形和目的矩形。當(dāng)然,由于覆蓋表面和主表面的像素格式的不同,這些約束也可以不一樣。 邊界約束影響源矩形和目的矩形放置的位置。dwAlignBoundarySrc和dwAlignBoundaryDest成員的值告訴你如何調(diào)整相關(guān)矩形的左上角。 矩形左上角的X坐標(biāo)(RECT結(jié)構(gòu)中的left成員)必須是報告出的值的整數(shù)倍。 大小約束影響源矩形和目的矩形的有效寬度。dwAlignSizeSrc和dwAlignSizeDest成員的值以像素的格式指出怎樣調(diào)整相關(guān)矩形的寬。如果按照一個最小拉伸因子拉伸矩形,應(yīng)確保拉伸后的矩形仍然是大小調(diào)整過的。拉伸矩形之后,通過向上圓整來調(diào)整寬度,就可以保持最小的拉伸因子。 c、最大和最小拉伸因子(Minimum and Maximum Stretch Factors) 由于硬件的局限性,一些設(shè)備限制了目的矩形同相關(guān)的源矩形寬度的比較。DirectDraw將這些約束作為拉伸因子。一個拉伸因子就是源矩形同目的矩形的寬度之間的比率。若驅(qū)動程序提供有關(guān)拉伸因子的信息,在調(diào)用IDirectDraw2::GetCaps方法時后,它將在DDCAPS結(jié)構(gòu)中設(shè)置DDCAPS_OVERLAYSTRETCH標(biāo)志。注意,拉伸因子都已經(jīng)乘以1000,所以值為1300的拉伸因子實際上是1.3。 不壓縮和拉伸覆蓋目的矩形的設(shè)備所報告出的最大最小拉伸因子通常是0。 最小拉伸因子指出目的矩形比源矩形寬多少或窄多少。如果最小拉伸因子大于1000,就必須增加目的矩形的寬度。例如,若拉伸因子為1300,則目的矩形的寬度應(yīng)該至少是源矩形寬度的1.3倍。如果拉伸因子小于1000,目的矩形就比源矩形的寬度要小。最大拉伸因子是目的矩形能夠拉伸的最大倍數(shù)。例如,若最大拉伸因子是2000,則目的矩形的寬度最多可以是源矩形寬度的2倍。若最大拉伸因子小于1000, 目的矩形就需要壓縮。經(jīng)過拉伸之后,目的矩形必須遵守設(shè)備要求的任何大小調(diào)整約束。因此,最后在大小調(diào)整之前拉伸目的矩形。硬件并不要求調(diào)整目的矩形的高度。你可以增加矩形的高度來保持方向比率的不變。 d、覆蓋Color Key 象其它類型的表面一樣,覆蓋表面也使用源、目的Color Key來控制表面之間的透明位塊傳輸操作。因為覆蓋表面的顯示不是通過位塊傳輸完成的,所以在調(diào)用IDirectDrawSurface3::UpdateOverlay方法時就需要采取不同的辦法來控制覆蓋表面顯示在主表面上的方式。答案就是覆蓋Color Key。同位塊傳輸相關(guān)的Color Key相似,覆蓋Color Key也有源Color Key和目的Color Key,可通過調(diào)用方法 IDirectDrawSurface3::SetColorKey并利用DDCKEY_DESTOVERLAY標(biāo)志來設(shè)置源Color Key和目的Color Key。覆蓋表面能夠?qū)⑽粔K傳輸和覆蓋Color Key結(jié)合在一起來控制位塊傳輸操作和覆蓋顯示操作,兩種不同類型的Color Key并不互相沖突。 IDirectDrawSurface3::UpdateOverlay方法用源Color Key檢查覆蓋表面中哪個像素應(yīng)該是透明的,允許主表面透過覆蓋表面顯示。同樣,該方法使用目的覆蓋Color Key來確定主表面顯示時哪部分允許倍覆蓋表面所覆蓋,其顯示效果同位塊傳輸Color Key相同。 e、 定位覆蓋表面(Positioning Overlay Surfaces) 在最先調(diào)用IDirectDrawSurface3::UpdateOverlay方法顯示一個覆蓋時,可以用方法 IDirectDrawSurface3::SetOverlayPosition來更新目的矩形。必須確保你指定的目的矩形的位置遵守邊界對齊約束, IDirectDraw2::SetOverlayPosition方法并不執(zhí)行剪切工作,使用了可能引起覆蓋越界的坐標(biāo)會使調(diào)用該方法失敗,并返回DDERR_INVALIDPOSITION。 f、創(chuàng)建覆蓋表面(Creating Overlay Surfaces) 象所有的表面一樣,你可以調(diào)用IDirectDraw2::CreateSurface方法來創(chuàng)建一個覆蓋表面。創(chuàng)建覆蓋表面還需要在相關(guān)的結(jié)構(gòu)DDSCAPS中包含DDSCAPS_OVERLAY標(biāo)志。覆蓋支持許多顯示設(shè)備,因此不能判斷一個給定的像素格式是否被大多數(shù)的驅(qū)動程序所支持,必須做好準(zhǔn)備使之能工作于多種像素格式。你可以調(diào)用IDirectDraw2::GetFourCCCodes方法來獲得驅(qū)動程序支持的有關(guān)非RGB格式的信息。要創(chuàng)建一個覆蓋表面,最好使用最常用的像素格式,若給定的像素格式不被支持,DirectDraw會使用顯示設(shè)備所支持的其他像素格式。創(chuàng)建覆蓋表面翻轉(zhuǎn)鏈也是允許的。 g、翻轉(zhuǎn)覆蓋表面(Flipping Overlay Surfaces) 同其他類型的表面一樣,你可以創(chuàng)建覆蓋表面翻轉(zhuǎn)鏈。一旦創(chuàng)建了覆蓋的翻轉(zhuǎn)鏈,就可以調(diào)用方法IDirectDrawSurface3::Flip來翻轉(zhuǎn)這些覆蓋。軟件解壓在調(diào)用Flip方法顯示覆蓋表面時可使用DDFLIP_ODD和 DDFLIP_EVEN標(biāo)志以減少運動贗象。如果驅(qū)動程序支持奇──偶翻轉(zhuǎn),在獲得了驅(qū)動程序的能力后,DDCAPS2_CANFLIPODDEVEN標(biāo)志將會在DDCAPS結(jié)構(gòu)中設(shè)定。一旦設(shè)定了DDCAPS2_CANFLIPODDEVEN,就可在調(diào)用IDirectDrawSurface3::UpdateOverlay方法時包含DDOVER_BOB標(biāo)志以通知驅(qū)動程序使用“Bob” 算法最小化運動贗象。此后,用DDFLIP_ODD或 DDFLIP_EVEN標(biāo)志調(diào)用Flip時,驅(qū)動程序?qū)詣诱{(diào)整覆蓋的源矩形來彌補(bǔ)抖動贗象。 如果獲取硬件的能力后沒有設(shè)置DDCAPS2_CANFLIPODDEVEN標(biāo)志,但在調(diào)用UpdateOverlay時又使用了 DDOVER_BOB標(biāo)志,那么該調(diào)用將會失敗。

?

轉(zhuǎn)載于:https://www.cnblogs.com/azraelly/archive/2013/01/13/2858852.html

總結(jié)

以上是生活随笔為你收集整理的Overlay Surfaces (覆盖表面)的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。