DrvStretchBltROP-Funktion (winddi.h)
Die DrvStretchBltROP-Funktion führt eine Stretch-Bitblockübertragung mithilfe eines ROP durch.
Syntax
BOOL DrvStretchBltROP(
[in, out] SURFOBJ *psoDest,
[in, out] SURFOBJ *psoSrc,
[in, optional] SURFOBJ *psoMask,
[in] CLIPOBJ *pco,
[in, optional] XLATEOBJ *pxlo,
[in, optional] COLORADJUSTMENT *pca,
[in] POINTL *pptlHTOrg,
[in] RECTL *prclDest,
[in] RECTL *prclSrc,
[in, optional] POINTL *pptlMask,
[in] ULONG iMode,
[in] BRUSHOBJ *pbo,
[in] DWORD rop4
);
Parameter
[in, out] psoDest
Zeiger auf eine SURFOBJ-Struktur , die die Oberfläche beschreibt, auf der gezeichnet werden soll.
[in, out] psoSrc
Zeiger auf eine SURFOBJ-Struktur, die die Quelloberfläche für die Bitblockübertragung beschreibt.
[in, optional] psoMask
Zeiger auf eine SURFOBJ-Struktur, die eine Maske für die Quelle definiert. Die Maske wird durch eine Logikzuordnung definiert, bei der es sich um eine Bitmap mit einem Bit pro Pixel handelt. In der Regel schränkt eine Maske den zu ändernden Bereich auf der Zieloberfläche ein. Diese Maske hat immer die gleiche Größe wie die Quelloberfläche.
[in] pco
Zeiger auf eine CLIPOBJ-Struktur , die den zu ändernden Bereich im Ziel einschränkt. Die CLIPOBJ_Xxx-Dienstroutinen werden bereitgestellt, um den Clipbereich als Eine Reihe von Rechtecken aufzulisten.
Nach Möglichkeit vereinfacht GDI den Ausschnitt. Im Gegensatz zu DrvBitBlt kann DrvStretchBltROP jedoch mit einem einzelnen Clipping-Rechteck aufgerufen werden. Dadurch werden Rundungsfehler beim Beschneiden der Ausgabe verhindert.
[in, optional] pxlo
Zeiger auf eine XLATEOBJ-Struktur , die angibt, wie Farbindizes zwischen der Quell- und Zieloberfläche übersetzt werden sollen. Wenn pxloNULL ist, ist keine Übersetzung erforderlich.
Diese XLATEOBJ-Struktur kann auch abgefragt werden, um die RGB-Farbe für einen beliebigen Quellindex zu finden. Eine qualitativ hochwertige Stretch-Bitblockübertragung muss in einigen Fällen Farben interpolieren.
[in, optional] pca
Zeiger auf eine COLORADJUSTMENT-Struktur, die die Farbanpassungswerte definiert, die vor dem Dehnung der Bits auf die Quellbitbitbits angewendet werden sollen. Weitere Informationen finden Sie in der Microsoft Windows SDK-Dokumentation.
[in] pptlHTOrg
Zeiger auf eine POINTL-Struktur , die den Ursprung des Halbtonpinsels auf der Zieloberfläche definiert. Bei Verwendung von Halbtonpinsel sollte der Treiber das obere linke Pixel des Pinsels an diesem Punkt ausrichten und den Pinsel entsprechend seinen Abmessungen wiederholen. Der Treiber sollte diesen Parameter ignorieren, wenn der rop4-Parameter kein Muster erfordert.
[in] prclDest
Zeiger auf eine RECTL-Struktur , die den zu ändernden rechteckigen Bereich definiert. Dieses Rechteck wird im Koordinatensystem der Zieloberfläche angegeben und durch zwei Punkte definiert: links oben und unten rechts. Die beiden Punkte, die das Rechteck definieren, sind nicht immer gut sortiert, d. h. die Koordinaten des zweiten Punkts sind nicht notwendigerweise größer als die des ersten Punkts. Der Treiber sollte die beiden x-Werte und/oder die beiden y-Werte austauschen, wenn das Zielrechteck nicht ordnungsgemäß sortiert ist.
Das Rechteck ist unten rechts exklusiv; Das heißt, er ist nicht Teil der Kopie.
DrvStretchBltROP wird nie mit einem leeren Zielrechteck aufgerufen.
[in] prclSrc
Zeiger auf eine RECTL-Struktur, die den zu kopierenden Bereich definiert. Dieses Rechteck wird im Koordinatensystem der Quelloberfläche angegeben und durch zwei Punkte definiert: links oben und unten rechts. Die beiden Punkte, die das Rechteck definieren, sind immer gut sortiert.
Das Rechteck ist unten rechts exklusiv; Das heißt, die unteren und rechten Ränder sind kein Teil der Kopie.
Der Treiber sollte dieses Rechteck dem durch prclDest definierten Rechteck zuordnen.
[in, optional] pptlMask
Zeiger auf eine POINTL-Struktur, die ein Pixel in der Maske definiert, auf die prclMask zeigt. Dieses Pixel entspricht dem pixel oben links im Quellrechteck, auf das prclSrc zeigt. Der Treiber sollte diesen Parameter ignorieren, wenn keine Maske angegeben ist.
[in] iMode
Gibt an, wie Quellpixel kombiniert werden, um Ausgabepixel abzurufen. Der HALFTONE-Modus ist langsamer als die anderen Modi, erzeugt jedoch Bilder mit höherer Qualität. Dieser Parameter kann einer der folgenden Werte sein:
Wert | Bedeutung |
---|---|
BLACKONWHITE | Bei einer verkleinernden Bitblockübertragung sollten Pixel mit einem booleschen AND-Vorgang kombiniert werden. Bei einer Stretch-Bitblockübertragung sollten Pixel repliziert werden. |
COLORONCOLOR | Bei einer verkleinernden Bitblockübertragung sollten genügend Pixel ignoriert werden, damit Pixel nicht kombiniert werden müssen. Bei einer Stretch-Bitblockübertragung sollten Pixel repliziert werden. |
HALBTON | Der Treiber kann Gruppen von Pixeln in der Ausgabeoberfläche verwenden, um die Farbe oder graue Ebene der Eingabe am besten zu erreichen. |
WHITEONBLACK | Bei einer verkleinernden Bitblockübertragung sollten Pixel mit einem booleschen OR-Vorgang kombiniert werden. Bei einer Stretch-Bitblockübertragung sollten Pixel repliziert werden. |
[in] pbo
Zeiger auf die BRUSHOBJ-Struktur, die zum Definieren des Musters für die Bitblockübertragung verwendet werden soll. Die BRUSHOBJ_pvGetRbrush Serviceroutine von GDI ruft die Realisierung des Pinsels des Geräts ab. Der Treiber kann diesen Parameter ignorieren, wenn der rop4-Parameter kein Muster erfordert.
[in] rop4
Stellt einen Rastervorgang dar, der definiert, wie die Masken-, Muster-, Quell- und Zielpixel kombiniert werden, um ein Ausgabepixel auf die Zieloberfläche zu schreiben.
Dies ist eine quartäre Rasteroperation, die eine natürliche Erweiterung des üblichen ternären Rop3-Vorgangs ist. Ein Rop4 hat 16 relevante Bits, die den 8 definierenden Bits eines Rop3 ähneln. (Die anderen redundanten Bits des Rop3 werden ignoriert.) Die einfachste Möglichkeit, einen Rop4 zu implementieren, besteht darin, seine 2 Bytes separat zu betrachten. Das untere Byte gibt einen Rop3 an, der berechnet werden soll, wenn die Maske, auf die psoMask zeigt, 1 ist. Das hohe Byte gibt einen Rop3 an, der berechnet und angewendet werden kann, wo die Maske null ist.
Rückgabewert
DrvStretchBltROP sollte bei Erfolg TRUE zurückgeben. Andernfalls sollte ein Fehlercode gemeldet und FALSE zurückgegeben werden.
Hinweise
Die Zuordnung wird durch prclSrc und prclDest definiert. Die in prclDest und prclSrc angegebenen Punkte liegen auf ganzzahligen Koordinaten, die Pixelzentrierungen entsprechen. Ein durch zwei solcher Punkte definiertes Rechteck wird als geometrisches Rechteck mit zwei Scheitelpunkten betrachtet, deren Koordinaten die angegebenen Punkte sind, aber 0,5 von jeder Koordinate subtrahiert werden. (POINTL-Strukturen sind kurze Schreibweise zum Angeben dieser Bruchkoordinatenvertices.)
Der Treiber kann optional DrvStretchBltROP implementieren. Wenn der Treiber diesen Aufruf einhakt, kann er EngStretchBltROP aufrufen, um die Dehnvorgänge auszuführen, die er nicht unterstützt.
Anforderungen
Anforderung | Wert |
---|---|
Zielplattform | Desktop |
Kopfzeile | winddi.h (einschließlich Winddi.h) |