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)

Vedi anche

D3DDDIFORMAT

D3DKM_TRANSPARENTBLTFLAGS

DXGK_RENDERKM_COMMAND

RECT