The DrvStretchBltROP function performs a stretching bit-block transfer using a ROP.
BOOL
DrvStretchBltROP(
IN SURFOBJ *psoDest,
IN SURFOBJ *psoSrc,
IN SURFOBJ *psoMask,
IN CLIPOBJ *pco,
IN XLATEOBJ *pxlo,
IN COLORADJUSTMENT *pca,
IN POINTL *pptlHTOrg,
IN RECTL *prclDest,
IN RECTL *prclSrc,
IN POINTL *pptlMask,
IN ULONG iMode,
IN BRUSHOBJ *pbo,
IN DWORD rop4
);
Whenever possible, GDI simplifies the clipping involved. However, unlike DrvBitBlt, DrvStretchBltROP can be called with a single clipping rectangle. This prevents rounding errors in clipping the output.
This XLATEOBJ structure can also be queried to find the RGB color for any source index. A high quality stretching bit-block transfer will need to interpolate colors in some cases.
The rectangle is lower-right exclusive; that is, it lower and right edges are not a part of the copy.
DrvStretchBltROP is never called with an empty destination rectangle.
The rectangle is lower-right exclusive; that is, its lower and right edges are not a part of the copy.
The driver should map this rectangle to the rectangle defined by prclDest.
| Value | Meaning |
|---|---|
| BLACKONWHITE | On a shrinking bit-block transfer, pixels should be combined with a Boolean AND operation. On a stretching bit-block transfer, pixels should be replicated. |
| COLORONCOLOR | On a shrinking bit-block transfer, enough pixels should be ignored so pixels need not be combined. On a stretching bit-block transfer, pixels should be replicated. |
| HALFTONE | The driver can use groups of pixels in the output surface to best approximate the color or gray level of the input. |
| WHITEONBLACK | On a shrinking bit-block transfer, pixels should be combined with a Boolean OR operation. On a stretching bit-block transfer, pixels should be replicated. |
This is a quaternary raster operation, which is a natural extension of the usual ternary Rop3 operation. A Rop4 has 16 relevant bits, which are similar to the 8 defining bits of a Rop3. (The other redundant bits of the Rop3 are ignored.) The simplest way to implement a Rop4 is to consider its 2 bytes separately. The lower byte specifies a Rop3 that should be computed wherever the mask to which psoMask points is 1. The high byte specifies a Rop3 that can be computed and applied wherever the mask is zero.
DrvStretchBltROP should return TRUE upon success. Otherwise, it should report an error code and return FALSE.
Declared in winddi.h. Include winddi.h.
The mapping is defined by prclSrc and prclDest. The points specified in prclDest and prclSrc lie on integer coordinates, which correspond to pixel centers. A rectangle defined by two such points is considered to be a geometric rectangle with two vertices whose coordinates are the given points, but with 0.5 subtracted from each coordinate. (POINTL structures are shorthand notation for specifying these fractional coordinate vertices.)
The driver can optionally implement DrvStretchBltROP. If the driver does hook this call, it can call EngStretchBltROP to perform those stretching blit operations that it does not support.
DrvAlphaBlend, DrvBitBlt, DrvPlgBlt, DrvStretchBlt, DrvTransparentBlt, EngAlphaBlend, EngBitBlt, EngPlgBlt, EngStretchBlt, EngStretchBltROP, EngTransparentBlt