# mlib_imagefilteredsubsample(3mlib) [sunos man page]

mlib_ImageFilteredSubsample(3MLIB) mediaLib Library Functions mlib_ImageFilteredSubsample(3MLIB)NAME

mlib_ImageFilteredSubsample, mlib_ImageFilteredSubsample_Fp - antialias filters and subsamples an imageSYNOPSIS

cc [ flag... ] file...[ library... ] #include <mlib.h> mlib_status mlib_ImageFilteredSubsample(mlib_image *dst, const mlib_image *src, mlib_s32 scaleX, mlib_s32 scaleY, mlib_s32 transX, mlib_s32 transY, const mlib_d64 *hKernel, const mlib_d64 *vKernel, mlib_s32 hSize, mlib_s32 vSize, mlib_s32 hParity, mlib_s32 vParity, mlib_edge edge); mlib_status mlib_ImageFilteredSubsample_Fp(mlib_image *dst, const mlib_image *src, mlib_s32 scaleX, mlib_s32 scaleY, mlib_s32 transX, mlib_s32 transY, const mlib_d64 *hKernel, const mlib_d64 *vKernel, mlib_s32 hSize, mlib_s32 vSize, mlib_s32 hParity, mlib_s32 vParity, mlib_edge edge);-lmlibDESCRIPTION

Each of the functions antialias filters and subsamples an image. The effect of one of the functions on an image is equivalent to performing convolution (filter) followed by subsampling (zoom out). The functions are similar to the mlib_ImageZoomTranslate() and mlib_ImageZoomTranslate_Fp() functions. But they have different definitions on scale factors and translations, hence use different coordinate mapping equations. The scaleX and scaleY used by mlib_ImageFilteredSub- sample() and mlib_ImageFilteredSubsample_Fp() are the reciprocals of the zoomx and zoomy, respectively, used by mlib_ImageZoomTranslate() and mlib_ImageZoomTranslate_Fp(). The functions use the following equations for coordinate mapping: xS = xD*scaleX + transX yS = yD*scaleY + transY where, a point (xD, yD) in the destination image is backward mapped to a point (xS, yS) in the source image. The arguments transX and transY are provided to support tiling. The subsample terms, i.e., the scale factors scaleX and scaleY, are restricted to positive integral values. Geometrically, one destination pixel maps to scaleX by scaleY source pixels. With odd scale factors, destination pixel centers map directly onto source pixel centers. With even scale factors, destination pixel centers map squarely between source pixel centers. Below are examples of even, odd, and combi- nation cases. s s s s s s s s s s s s d d d s s s s s s s d s s d s s s s s s s s s s s s s d d d s s s s s s s s s s s s s s s s s s s d s s d s d d d s s s s s s s s s s s s Even scaleX/Y factors Odd scaleX/Y factors s s s s s s s s s s s s d d s s s s s s s d s s d s s d s s s s s s s s s s s s s d d s s s s s s s s s s s s s s s s s s s d s s d s s d s d d s s s s s s s s s s s s Odd/even scaleX/Y factors Even/odd scaleX/Y factors where s = source pixel centers d = destination pixel centers mapped to source The applied filter is quadrant symmetric (typically antialias + resample). The filter is product-separable, quadrant symmetric, and is defined by half of its span. Parity is used to signify whether the symmetric kernel has a double center (even parity) or a single center value (odd parity). For example, if hParity == 0 (even), the horizontal kernel is defined as: hKernel[hSize-1], ..., hKernel[0], hKernel[0], ..., hKernel[hSize-1] Otherwise, if hParity == 1 (odd), the horizontal kernel is defined as: hKernel[hSize-1], ..., hKernel[0], ..., hKernel[hSize-1] Horizontal and vertical kernels representing convolved resample (i.e., the combined separable kernels) can be computed from a convolution filter (with odd parity), a resample filter, and because the subsample factors affect resample weights, the subsample scale factors. It is the user's responsibility to provide meaningful combined kernels. To compute the value of a pixel centered at point (xD, yD) in the destination image, apply the combined kernel to the source image by aligning the kernel's geometric center to the backward mapped point (xS, yS) in the source image. In the cases that it can not be exactly on top of point (xS, yS), the kernel's center should be half-pixel right and/or below that point. When this is done in a separable manner, the centers of horizontal and vertical kernels should align with xS and yS, respectively. The combination of subsampling and filtering has performance benefits over sequential fucntion usage in part due to the symmetry con- straints imposed by only allowing integer parameters for scaling and only allowing separable symmetric filters.PARAMETERS

The function takes the following arguments: dst Pointer to destination image. src Pointer to source image. scaleX The x scale factor of subsampling. scaleY The y scale factor of subsampling. transX The x translation. transY The y translation. hKernel Pointer to the compact form of horizontal kernel. vKernel Pointer to the compact form of vertical kernel. hSize Size of array hKernel. vSize Size of array vKernel. hParity Parity of horizontal kernel (0: even, 1: odd). vParity Parity of vertical kernel (0: even, 1: odd). edge Type of edge condition. It can be one of the following: MLIB_EDGE_DST_NO_WRITERETURN VALUES

The function returns MLIB_SUCCESS if successful. Otherwise it returns MLIB_FAILURE.ATTRIBUTES

See attributes(5) for descriptions of the following attributes: +-----------------------------+-----------------------------+ | ATTRIBUTE TYPE | ATTRIBUTE VALUE | +-----------------------------+-----------------------------+ |Interface Stability |Evolving | +-----------------------------+-----------------------------+ |MT-Level |MT-Safe | +-----------------------------+-----------------------------+SEE ALSO

mlib_ImageSubsampleAverage(3MLIB), mlib_ImageZoomTranslate(3MLIB), mlib_ImageZoomTranslate_Fp(3MLIB), attributes(5)SunOS 5.1010 Nov 2004 mlib_ImageFilteredSubsample(3MLIB)