The EngStretchBlt function causes GDI to do a stretching bit-block transfer.
BOOL
EngStretchBlt(
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
);
The mask limits the area of the source that is copied. If this parameter is specified, it has an implicit rop4 of 0xCCAA, meaning the source should be copied wherever the mask is 1, but the destination should be left alone wherever the mask is 0.
If this parameter is null, the rop4 is implicitly 0xCCCC, which means the source should be copied everywhere in the source rectangle.
Whenever possible, GDI simplifies the clipping involved. However, unlike DrvBitBlt, EngStretchBlt 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.
If the destination rectangle is not well ordered, EngStretchBlt makes it well ordered.
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 edges of any rectangle never intersect a pixel, but go around a set of pixels. The pixels that are inside the rectangle are those expected for a bottom-right exclusive rectangle. EngStretchBlt maps the geometric source rectangle exactly onto the geometric destination rectangle.
| 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 that pixels don't need to 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. |
The return value is TRUE if the function is successful. Otherwise, it is FALSE and an error code is reported.
Declared in winddi.h. Include winddi.h.
This function allows the same halftoning algorithm to be applied to GDI bitmaps and device surfaces.
The driver should call EngStretchBlt if it has hooked DrvStretchBlt and is called to do something the driver does not support.