Condividi tramite


struttura DXGK_GDIARG_TRANSPARENTBLT (d3dkmddi.h)

La struttura DXGK_GDIARG_TRANSPARENTBLT descrive le caratteristiche di un'operazione GDI di trasferimento bit-block (bitblt) accelerato dall'hardware 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;

Membri

[in] SrcRect

StrutturaRECTche 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 ben ordinati.

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: superiore sinistro e inferiore destro. 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 ben ordinati.

Il rettangolo di destinazione definito da DstRect può superare i limiti della superficie di destinazione, ma i sotto rettangoli non possono. Inoltre, tutti i rettangoli secondari sono garantiti per adattarsi all'interno della superficie di destinazione. I rettangoli secondari possono essere vincolati ulteriormente da un rettangolo di delimitazione inferiore al 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 ARGB senza segno a 32 bit (come definito dal valore D3DDDIFMT_A8R8G8B8 dell'enumerazione D3DDDIFORMAT). I pixel sulla superficie di origine che corrispondono al colore trasparente specificato da Colore 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 trasparente a blocchi a bit trasparente accelerato dall'hardware dell'adattatore di visualizzazione.

SrcPitch

[in] Passo della superficie di origine, in byte.

Osservazioni

I rettangoli specificati dalla SrcRect e DstRect membri associati rispettivamente a tutti i sotto rettangoli negli spazi di superficie di origine e di destinazione. Il sottosistema kernel della grafica 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 a 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, pertanto 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 sia impostato il valore COLORONCOLOR in Wingdi.h. In un trasferimento di blocchi di bit compattabile, è necessario ignorare sufficienti pixel in modo che i pixel non debbano essere combinati. In un trasferimento di blocco di bit esteso, i pixel devono essere replicati.

Per altre informazioni sui trasferimenti di blocchi di bit trasparenti, vedere Copia di bitmap.

Quando i rettangoli secondari 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 per le coordinate nella superficie di origine è definita dalle formule seguenti, dove:

  • (Xd, Yd) è un punto all'interno del rettangolo secondario
  • (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)

Fabbisogno

Requisito Valore
client minimo supportato Windows 7
intestazione d3dkmddi.h (include D3dkmddi.h)

Vedere anche

D3DDDIFORMAT

D3DKM_TRANSPARENTBLTFLAGS

DXGK_RENDERKM_COMMAND

RECT