DXGK_GDIARG_TRANSPARENTBLT Struktur (d3dkmddi.h)
Die DXGK_GDIARG_TRANSPARENTBLT-Struktur beschreibt die Eigenschaften eines hardwarebeschleunigten Bitblocktransfers (Bitblt)-Vorgangs mit Transparenz.
Syntax
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;
Angehörige
[in] SrcRect
Eine RECT- Struktur, die den zu kopierenden rechteckigen Bereich definiert. Dieses Rechteck wird im Koordinatensystem der Quelloberfläche angegeben und durch zwei Punkte definiert: oben links und unten rechts. Die beiden Punkte, die das Rechteck definieren, sind immer gut sortiert.
Weitere Informationen finden Sie im Abschnitt "Hinweise".
[in] DstRect
Eine RECT- Struktur, die den zu ändernden rechteckigen Bereich definiert. Dieses Rechteck wird im Koordinatensystem der Zieloberfläche angegeben und durch zwei Punkte definiert: oben links und unten rechts. Das Rechteck ist ausschließlich unten rechts; d. h. ihre unteren und rechten Ränder sind kein Teil der Bitblockübertragung. Die beiden Punkte, die das Rechteck definieren, sind immer gut sortiert.
Das durch DstRect- definierte Zielrechteck kann die Grenzen der Zieloberfläche überschreiten, aber Unterrechtecke können nicht. Darüber hinaus werden alle Unterrechtecke garantiert in die Zieloberfläche passen. Unterrechtecke können weiter durch ein umgebendes Rechteck eingeschränkt werden, das kleiner als das Zielrechteck ist.
Weitere Informationen finden Sie im Abschnitt "Hinweise".
SrcAllocationIndex
[in] Ein Index des Elements in der Zuordnungsliste, das die Zuordnung angibt, auf die vom SrcRect Quellrechteck verwiesen wird.
DstAllocationIndex
[in] Ein Index des Elements in der Zuordnungsliste, der die Zuordnung angibt, auf die vom DstRect Zielrechteck verwiesen wird.
Color
[in] Gibt die physische transparente Farbe auf der Quelloberfläche im 32-Bit-ARGB-Pixelformat (wie durch den D3DDDIFMT_A8R8G8B8 Wert der D3DDDIFORMAT Enumeration definiert) an. Alle Pixel auf der Quelloberfläche, die der transparenten Farbe entsprechen, die durch Color angegeben wird, werden nicht kopiert.
NumSubRects
[in] Die Anzahl der Unterrechtecke im Zieloberflächenbereich, die durch das DstRect- Zielrechteck begrenzt ist.
pSubRects
[in] Ein Zeiger auf die Unterrechtecke im Zieloberflächenbereich.
Flags
[in] Eine D3DKM_TRANSPARENTBLTFLAGS Struktur, die die hardwarebeschleunigten, transparenten Bitblockübertragungsfunktionen des Displayadapters angibt.
SrcPitch
[in] Die Neigung der Quelloberfläche in Byte.
Bemerkungen
Die Rechtecke, die durch die SrcRect- und DstRect-Elemente angegeben werden, Elemente alle Unterrechtecke in den Quell- bzw. Zieloberflächenräumen gebunden haben. Das Microsoft DirectX-Grafik-Kernelsubsystem fordert niemals eine transparente Bitblockübertragung an, wenn sich die Quell- und Zielrechtecke auf derselben Oberfläche überlappen.
Um den transparenten Bitblockübertragungsvorgang abzuschließen, sollte die Farbe der einzelnen Pixel in DstRect- mithilfe der folgenden Formel berechnet werden:
typedef DXGK_GDIARG_TRANSPARENTBLT tblt;
if (tblt.Flags.HonorAlpha)
{
if (SourceColor != tblt.Color)
{
DestinationColor = SourceColor;
}
}
else
{
if ((SourceColor & 0x00FFFFFF) != tblt.Color)
{
DestinationColor = SourceColor;
}
}
In diesem Fall gibt ein Wert von 0x00FFFFFF im ARGB-Format alpha = 0 an, daher wird alpha-Blending nicht implementiert.
Wenn ein Stretch-Bitblockübertragungsvorgang erforderlich ist, werden die x- und y-Stretchverhältnisse als Verhältnis der x- und y-Größen von DstRect und SrcRectberechnet. Darüber hinaus wird der Stretchvorgang fortgesetzt, als ob der COLORONCOLOR-Wert in Wingdi.h festgelegt ist. Bei einer verkleinerten Bitblockübertragung sollten genügend Pixel ignoriert werden, damit Pixel nicht kombiniert werden müssen. Bei einer stretchten Bitblockübertragung sollten Pixel repliziert werden.
Weitere Informationen zu transparenten Bitblockübertragungen finden Sie unter Kopieren von Bitmaps.
Wenn Unterrechtecke in den Quelloberflächenbereich transformiert werden, ist das Ergebnis garantiert innerhalb der Quelloberfläche. Die Transformation der Koordinaten eines Unterrechtecks in der Zieloberfläche in Koordinaten in der Quelloberfläche wird durch die folgenden Formeln definiert, wobei:
- (Xd, Yd) ist ein Punkt innerhalb des Unterrechtecks.
- (Xs, Ys) ist ein Punkt innerhalb des Quellrechtecks.
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)
Anforderungen
Anforderung | Wert |
---|---|
mindestens unterstützte Client- | Windows 7 |
Header- | d3dkmddi.h (einschließlich D3dkmddi.h) |