estrutura DXGK_GDIARG_TRANSPARENTBLT (d3dkmddi.h)
A estrutura DXGK_GDIARG_TRANSPARENTBLT descreve as características de uma operação de transferência de bits (bitblt) acelerada por hardware GDI com transparência.
Sintaxe
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;
Membros
[in] SrcRect
Uma estrutura RECT que define a área retangular a ser copiada. Esse retângulo é especificado no sistema de coordenadas da superfície de origem e é definido por dois pontos: superior esquerdo e inferior direito. Os dois pontos que definem o retângulo são sempre bem ordenados.
Para obter mais informações, consulte a seção Comentários.
[in] DstRect
Uma estrutura RECT que define a área retangular a ser modificada. Esse retângulo é especificado no sistema de coordenadas da superfície de destino e é definido por dois pontos: superior esquerdo e inferior direito. O retângulo é exclusivo para o canto inferior direito; ou seja, suas bordas inferior e direita não fazem parte da transferência de bloco de bits. Os dois pontos que definem o retângulo são sempre bem ordenados.
O retângulo de destino definido por DstRect pode exceder os limites da superfície de destino, mas os subtângulos não podem. Além disso, todos os sub-retângulos são garantidos para caber dentro da superfície de destino. Os subtângulos podem ser restringidos ainda mais por um retângulo delimitador menor que o retângulo de destino.
Para obter mais informações, consulte a seção Comentários.
SrcAllocationIndex
[in] Um índice do elemento na lista de alocação que especifica a alocação referenciada pelo SrcRect retângulo de origem.
DstAllocationIndex
[in] Um índice do elemento na lista de alocação que especifica a alocação referenciada pelo DstRect retângulo de destino.
Color
[in] Especifica a cor transparente física na superfície de origem, no formato de pixel sem sinal ARGB de 32 bits (conforme definido pelo valor D3DDDIFMT_A8R8G8B8 da enumeração D3DDDIFORMAT). Todos os pixels na superfície de origem que correspondam à cor transparente especificada por de Cor não são copiados.
NumSubRects
[in] O número de sub-retângulos no espaço de superfície de destino delimitado pelo DstRect retângulo de destino.
pSubRects
[in] Um ponteiro para os sub-retângulos no espaço de superfície de destino.
Flags
[in] Uma estrutura de D3DKM_TRANSPARENTBLTFLAGS que especifica os recursos de transferência transparente de bloco de bits transparentes aceleradas pelo hardware do adaptador de exibição.
SrcPitch
[in] O tom da superfície de origem, em bytes.
Observações
Os retângulos especificados pelo SrcRect e DstRect membros associaram todos os sub-retângulos nos espaços de superfície de origem e destino, respectivamente. O subsistema de kernel gráfico do Microsoft DirectX nunca solicitará uma transferência transparente de bloco de bits se os retângulos de origem e destino se sobrepõem na mesma superfície.
Para concluir a operação de transferência transparente de bloco de bits, a cor de cada pixel em DstRect deve ser computada usando a seguinte fórmula:
typedef DXGK_GDIARG_TRANSPARENTBLT tblt;
if (tblt.Flags.HonorAlpha)
{
if (SourceColor != tblt.Color)
{
DestinationColor = SourceColor;
}
}
else
{
if ((SourceColor & 0x00FFFFFF) != tblt.Color)
{
DestinationColor = SourceColor;
}
}
Nesse caso, um valor de 0x00FFFFFF no formato ARGB indica alfa = 0, portanto, a mistura alfa não é implementada.
Se uma operação de transferência de bloco de bits elástico for necessária, as proporções de alongamento x e y serão computadas respectivamente como as proporções dos tamanhos x e y de DstRect e SrcRect. Além disso, a operação de alongamento continuará como se o valor COLORONCOLOR no wingdi.h estivesse definido. Em uma transferência de bloco de bits reduzida, pixels suficientes devem ser ignorados para que os pixels não precisem ser combinados. Em uma transferência de bloco de bits alongada, os pixels devem ser replicados.
Para obter mais informações sobre transferências transparentes de bloco de bits, consulte Copiar bitmaps.
Quando sub-retângulos são transformados no espaço da superfície de origem, o resultado é garantido estar dentro da superfície de origem. A transformação das coordenadas de um sub-retângulo na superfície de destino para coordenadas na superfície de origem é definida pelas seguintes fórmulas, em que:
- (Xd, Yd) é um ponto dentro do sub-retângulo
- (Xs, Ys) é um ponto dentro do retângulo de origem
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)
Requisitos
Requisito | Valor |
---|---|
de cliente com suporte mínimo | Windows 7 |
cabeçalho | d3dkmddi.h (inclua D3dkmddi.h) |