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 | |
); |
EngStretchBlt causes GDI to do a stretching bit-block transfer. This function allows the same halftoning algorithm to be applied to GDI bitmaps and device surfaces.
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 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.
EngStretchBlt inverts x and y if the destination
rectangle is not 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 |
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. |
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. |
The return value is TRUE if the function is successful. Otherwise, it is FALSE, and an error code is logged.
The driver should call EngStretchBlt if it has hooked DrvStretchBlt and is called to do something the driver does not support.