struttura DXGK_GDIARG_TRANSPARENTBLT (d3dkmddi.h)
La struttura DXGK_GDIARG_TRANSPARENTBLT descrive le caratteristiche di un'operazione GDI di trasferimento bit-block (bitblt) con trasparenza.
Sintassi
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;
Members
[in] SrcRect
Struttura RECT che definisce l'area rettangolare da copiare. Questo rettangolo viene specificato nel sistema di coordinate della superficie di origine ed è definito da due punti: superiore sinistro e inferiore destro. I due punti che definiscono il rettangolo sono sempre ordinati correttamente.
Per altre informazioni, vedere la sezione Osservazioni.
[in] DstRect
Struttura RECT che definisce l'area rettangolare da modificare. Questo rettangolo viene specificato nel sistema di coordinate della superficie di destinazione ed è definito da due punti: in alto a sinistra e in basso a destra. Il rettangolo è esclusivo in basso a destra; ovvero i bordi inferiori e destro non fanno parte del trasferimento del blocco di bit. I due punti che definiscono il rettangolo sono sempre ordinati correttamente.
Il rettangolo di destinazione definito da DstRect può superare i limiti della superficie di destinazione, ma i sotto rettangoli non possono. Inoltre, tutti i sotto rettangoli sono garantiti per adattarsi all'interno della superficie di destinazione. I rettangoli secondari possono essere vincolati ulteriormente da un rettangolo di delimitazione più piccolo del rettangolo di destinazione.
Per altre informazioni, vedere la sezione Osservazioni.
SrcAllocationIndex
[in] Indice dell'elemento nell'elenco di allocazione che specifica l'allocazione a cui fa riferimento il rettangolo di origine SrcRect .
DstAllocationIndex
[in] Indice dell'elemento nell'elenco di allocazione che specifica l'allocazione a cui fa riferimento il rettangolo di destinazione DstRect .
Color
[in] Specifica il colore trasparente fisico nella superficie di origine, in formato pixel senza segno ARGB a 32 bit, come definito dal valore D3DDDIFMT_A8R8G8B8 dell'enumerazione D3DDDIFORMAT . I pixel nella superficie di origine che corrispondono al colore trasparente specificato da Color non vengono copiati.
NumSubRects
[in] Numero di sotto rettangoli nello spazio della superficie di destinazione delimitato dal rettangolo di destinazione DstRect .
pSubRects
[in] Puntatore ai sotto rettangoli nello spazio della superficie di destinazione.
Flags
[in] Struttura D3DKM_TRANSPARENTBLTFLAGS che specifica le funzionalità di trasferimento in blocchi a bit trasparente trasparente con accelerazione hardware dell'adattatore di visualizzazione.
SrcPitch
[in] Passo della superficie di origine, in byte.
Commenti
I rettangoli specificati dai membri SrcRect e DstRect hanno associato rispettivamente tutti i sotto rettangoli negli spazi di superficie di origine e di destinazione. Il sottosistema kernel grafico Microsoft DirectX non richiederà mai un trasferimento trasparente a blocchi di bit se i rettangoli di origine e di destinazione si sovrappongono sulla stessa superficie.
Per completare l'operazione di trasferimento in blocchi di bit trasparente, è necessario calcolare il colore di ogni pixel in DstRect usando la formula seguente:
typedef DXGK_GDIARG_TRANSPARENTBLT tblt;
if (tblt.Flags.HonorAlpha)
{
if (SourceColor != tblt.Color)
{
DestinationColor = SourceColor;
}
}
else
{
if ((SourceColor & 0x00FFFFFF) != tblt.Color)
{
DestinationColor = SourceColor;
}
}
In questo caso, un valore di 0x00FFFFFF in formato ARGB indica alfa = 0, quindi la fusione alfa non viene implementata.
Se è necessaria un'operazione di trasferimento a blocchi di bit esteso, i rapporti di estensione x e y vengono calcolati rispettivamente come proporzioni delle dimensioni x e y di DstRect e SrcRect. Inoltre, l'operazione di estensione procederà come se il valore COLORONCOLOR in Wingdi.h sia impostato. In un trasferimento di blocchi di bit compattabile, è necessario ignorare un numero sufficiente di pixel in modo che i pixel non debbano essere combinati. In un trasferimento di blocchi di bit esteso, i pixel devono essere replicati.
Per altre informazioni sui trasferimenti di blocchi di bit trasparenti, vedere Copia di bitmap.
Quando i sotto rettangoli vengono trasformati nello spazio della superficie di origine, il risultato è garantito che si trovi all'interno della superficie di origine. La trasformazione delle coordinate di un sotto rettangolo nella superficie di destinazione alle coordinate nella superficie di origine è definita dalle formule seguenti, dove:
- (Xd, Yd) è un punto all'interno del sotto rettangolo
- (Xs, Ys) è un punto all'interno del rettangolo di origine
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)
Requisiti
Requisito | Valore |
---|---|
Client minimo supportato | Windows 7 |
Intestazione | d3dkmddi.h (include D3dkmddi.h) |