DXGK_GDIARG_TRANSPARENTBLT 結構 (d3dkmddi.h)
DXGK_GDIARG_TRANSPARENTBLT結構描述具有透明度的 GDI 硬體加速位區塊傳輸 (bitblt) 作業的特性。
語法
typedef struct _DXGK_GDIARG_TRANSPARENTBLT {
[in] RECT SrcRect;
[in] RECT DstRect;
UINT SrcAllocationIndex;
UINT DstAllocationIndex;
UINT Color;
UINT NumSubRects;
RECT *pSubRects;
D3DKM_TRANSPARENTBLTFLAGS Flags;
UINT SrcPitch;
} DXGK_GDIARG_TRANSPARENTBLT;
成員
[in] SrcRect
RECT 結構,定義要複製的矩形區域。 這個矩形是在來源介面的座標系統中指定,並由兩個點定義:左上方和右下角。 定義矩形的兩個點一律會妥善排序。
如需詳細資訊,請參閱<備註>一節。
[in] DstRect
RECT 結構,定義要修改的矩形區域。 這個矩形是在目的地介面的座標系統中指定,並由兩個點定義:左上方和右下角。 矩形的右下角是獨佔的;也就是說,其下邊緣和右邊緣不是位區塊傳輸的一部分。 定義矩形的兩個點一律會妥善排序。
DstRect 所定義的目的地矩形可以超過目的介面的界限,但子矩形不能。 此外,保證所有子矩形都符合目的地表面。 子矩形可以透過小於目的矩形的周框進一步限制。
如需詳細資訊,請參閱<備註>一節。
SrcAllocationIndex
[in]配置清單中的專案索引,指定 SrcRect 來源矩形所參考的配置。
DstAllocationIndex
[in]配置清單中的專案索引,指定 DstRect 目的地矩形所參考的配置。
Color
[in]指定來源介面中的實體透明色彩,以 32 位 ARGB 無符號像素格式 (,如D3DDDIFORMAT列舉) 的 D3DDDIFMT_A8R8G8B8 值所定義。 來源介面上符合 Color 所指定透明色彩的任何圖元都不會複製。
NumSubRects
[in]目的地介面空間中由 DstRect 目的矩形系結的子矩形數目。
pSubRects
[in]目的地介面空間中子矩形的指標。
Flags
[in] D3DKM_TRANSPARENTBLTFLAGS 結構,指定顯示適配卡的硬體加速透明位區塊傳輸功能。
SrcPitch
[in]來源表面的音調,以位元組為單位。
備註
SrcRect 和 DstRect 成員所指定的矩形會分別系結來源和目的地介面空間中的所有子矩形。 如果來源和目的地矩形在相同表面上重疊,Microsoft DirectX 圖形核心子系統永遠不會要求透明位區塊傳輸。
若要完成透明位區塊傳輸作業,應該使用下列公式來計算 DstRect 中每個圖元的色彩:
typedef DXGK_GDIARG_TRANSPARENTBLT tblt;
if (tblt.Flags.HonorAlpha)
{
if (SourceColor != tblt.Color)
{
DestinationColor = SourceColor;
}
}
else
{
if ((SourceColor & 0x00FFFFFF) != tblt.Color)
{
DestinationColor = SourceColor;
}
}
在此情況下,ARGB 格式的 0x00FFFFFF 值表示 alpha = 0,因此不會實作 Alpha 混合。
如果需要延展位區塊傳輸作業,x 和 y 延展比例會分別計算為 DstRect 和 SrcRect x 和 y 大小的比率。 此外,延展作業會繼續,就像 已設定 Wingdi.h 中的 COLORONCOLOR 值一樣。 在壓縮位區塊傳輸中,應該忽略足夠的圖元,因此不需要合併圖元。 在延展位區塊傳輸中,應該復寫圖元。
如需透明位區塊傳輸的詳細資訊,請參閱 複製位圖。
當子矩形轉換成來源介面空間時,結果保證會位於來源介面內。 子矩形在目的地介面中將子矩形座標轉換成來源介面中的座標是由下列公式所定義,其中:
- (Xd,Yd) 是子矩形內的點
- (Xs,Ys) 是來源矩形內的點
float Ws = SrcRect.right - SrcRect.left;
float Wd = DstRect.right - DstRect.left;
int Xs = round((Xd - DstRect.left + 0.5) * Ws/Wd + SrcRect.left - 0.5)
OR
int Xs = truncate((Xd - DstRect.left + 0.5) * Ws/Wd + SrcRect.left)
float Hs = SrcRect.bottom - SrcRect.top;
float Hd = DstRect.bottom - DstRect.top;
int Ys = round((Yd - DstRect.top + 0.5) * Hs/Hd + SrcRect.top - 0.5)
OR
int Ys = truncate((Yd - DstRect.top + 0.5) * Hs/Hd + SrcRect.top)
規格需求
需求 | 值 |
---|---|
最低支援的用戶端 | Windows 7 |
標頭 | d3dkmddi.h (包含 D3dkmddi.h) |