共用方式為


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]來源表面的音調,以位元組為單位。

言論

SrcRectDstRect 所指定的矩形, 成員分別系結來源和目的地表面空間中的所有子矩形。 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 延展比例會分別計算為 DstRectSrcRect的 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)

另請參閱

D3DDDIFORMAT

D3DKM_TRANSPARENTBLTFLAGS

DXGK_RENDERKM_COMMAND

RECT