structure DXGK_GDIARG_TRANSPARENTBLT (d3dkmddi.h)
La structure DXGK_GDIARG_TRANSPARENTBLT décrit les caractéristiques d’une opération de transfert de bloc de bits (bitblt) avec accélération matérielle GDI avec transparence.
Syntaxe
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;
Membres
[in] SrcRect
Structure RECT qui définit la zone rectangulaire à copier. Ce rectangle est spécifié dans le système de coordonnées de la surface source et est défini par deux points : en haut à gauche et en bas à droite. Les deux points qui définissent le rectangle sont toujours bien ordonnés.
Pour plus d'informations, consultez la section Notes.
[in] DstRect
Structure RECT qui définit la zone rectangulaire à modifier. Ce rectangle est spécifié dans le système de coordonnées de la surface de destination et est défini par deux points : en haut à gauche et en bas à droite. Le rectangle est exclusif en bas à droite ; autrement dit, ses bords inférieur et droit ne font pas partie du transfert de bloc de bits. Les deux points qui définissent le rectangle sont toujours bien ordonnés.
Le rectangle de destination défini par DstRect peut dépasser les limites de la surface de destination, mais les sous-rectangles ne le peuvent pas. En outre, tous les sous-rectangles sont garantis pour s’adapter à l’intérieur de la surface de destination. Les sous-rectangles peuvent être limités davantage par un rectangle englobant plus petit que le rectangle de destination.
Pour plus d'informations, consultez la section Notes.
SrcAllocationIndex
[in] Index de l’élément dans la liste d’allocation qui spécifie l’allocation référencée par le rectangle source SrcRect .
DstAllocationIndex
[in] Index de l’élément dans la liste d’allocation qui spécifie l’allocation référencée par le rectangle de destination DstRect .
Color
[in] Spécifie la couleur physique transparente dans la surface source, au format de pixels non signés ARGB 32 bits (tel que défini par la valeur D3DDDIFMT_A8R8G8B8 de l’énumération D3DDDIFORMAT ). Les pixels de la surface source qui correspondent à la couleur transparente spécifiée par Color ne sont pas copiés.
NumSubRects
[in] Nombre de sous-rectangles dans l’espace de surface de destination délimité par le rectangle de destination DstRect .
pSubRects
[in] Pointeur vers les sous-rectangles dans l’espace de surface de destination.
Flags
[in] Une structure D3DKM_TRANSPARENTBLTFLAGS qui spécifie les fonctionnalités de transfert par blocs de bits transparents et transparents de l’adaptateur d’affichage.
SrcPitch
[in] Pitch de la surface source, en octets.
Remarques
Les rectangles spécifiés par les membres SrcRect et DstRect ont lié respectivement tous les sous-rectangles dans les espaces de surface source et de destination. Le sous-système du noyau graphique Microsoft DirectX ne demande jamais un transfert transparent par bloc de bits si les rectangles source et de destination se chevauchent sur la même surface.
Pour effectuer l’opération de transfert de bloc de bits transparent, la couleur de chaque pixel dans DstRect doit être calculée à l’aide de la formule suivante :
typedef DXGK_GDIARG_TRANSPARENTBLT tblt;
if (tblt.Flags.HonorAlpha)
{
if (SourceColor != tblt.Color)
{
DestinationColor = SourceColor;
}
}
else
{
if ((SourceColor & 0x00FFFFFF) != tblt.Color)
{
DestinationColor = SourceColor;
}
}
Dans ce cas, une valeur de 0x00FFFFFF au format ARGB indique alpha = 0. Par conséquent, la fusion alpha n’est pas implémentée.
Si une opération de transfert de bloc de bits d’étirement est requise, les rapports d’étirement x et y sont calculés respectivement en tant que ratios des tailles x et y de DstRect et SrcRect. En outre, l’opération d’étirement se poursuit comme si la valeur COLORONCOLOR dans Wingdi.h était définie. Dans un transfert de bloc de bits qui diminue, suffisamment de pixels doivent être ignorés pour que les pixels n’ont pas besoin d’être combinés. Dans un transfert de bloc de bits étirant, les pixels doivent être répliqués.
Pour plus d’informations sur les transferts transparents de blocs de bits, consultez Copie de bitmaps.
Lorsque les sous-rectangles sont transformés en espace de surface source, le résultat est garanti à l’intérieur de la surface source. La transformation des coordonnées d’un sous-rectangle dans la surface de destination en coordonnées dans la surface source est définie par les formules suivantes, où :
- (Xd, Yd) est un point à l’intérieur du sous-rectangle
- (Xs, Ys) est un point à l’intérieur du rectangle source
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)
Configuration requise
Condition requise | Valeur |
---|---|
Client minimal pris en charge | Windows 7 |
En-tête | d3dkmddi.h (inclure D3dkmddi.h) |