impCreateZoom(3)
impCreateZoom, impDestroyZoom, impResetZoom, impZoomRow - zoom image data
As shipped in IRIX 6.5.19. Unchanged since IRIX 6.5.
NAME impCreateZoom, impDestroyZoom, impResetZoom, impZoomRow - zoom image data SYNOPSIS #include <imp.h> IMPZoom* impCreateZoom(ushort_t srcXSize, ushort_t srcYSize, ushort_t dstXSize, ushort_t dstYSize, long min, long max, IMPReadRowFunc readRowFunc, int numChannels, IMPFilterType filterType, float blurFactor); void impDestroyZoom(IMPZoom *zoom); void impResetZoom(IMPZoom *zoom); int impZoomRow(IMPZoom *zoom, short *buffer, ushort_t row, void *clientData); DESCRIPTION The libimp library provides an API for performing image resizing or zooming. Images can be zoomed up or down using any of a number of resampling methods. The resampling methods divide into two categories. The first resampling category is non-filtered zooming (a.k.a. replicative zoom, decimation). The second resampling category is filtered zooming where a filter of a given shape is applied to the data. The image zooming is performed on a row by row basis using a one pass, two dimensional convolution. To zoom one or more rows of an image, first create a zoom operator by calling impCreateZoom. One of the parameters to impCreateZoom is a pointer to a function that will be called during the zoom to read rows of the source image. To obtain zoomed rows call impZoomRow. When all desired zoomed rows have been obtained, call impDestroyZoom to deallocate storage held by the zoom operator. When filtered zooming is performed a number of contiguous rows of image data are cached. Often all rows of a given image channel are zoomed followed by all rows of the next channel. Since rows are cached, the cache should be flushed when switching between image channels. The impResetZoom function performs this row cache flushing operation. The impCreateZoom function has the following parameters: srcXSize, srcYSize Width and height of the source image in pixels. dstXSize, dstYSize Width and height of the destination (i.e. zoomed) image in pixels. min, max Minimum and maximum intensity values to be used for clamping of the zoomed image data. Using certain filters (e.g. Mitchell) it is possible for the zoomed data intensity range to exceed the original data intensity range. Typically these parameters are set to the minimum and maximum possible input data intensities. For example, for 8-bit input data min would be set to 0 and max would be set to 255. readRowFunc Pointer to a function that will be called to read a row from the source image. The prototype for this function is: int (*IMPReadRowFunc)(short *buffer, ushort_t row, void *clientData); The function should read the image row indicated by row and place the data in buffer. The storage for buffer is allocated and deallocated by the zoom operator and should not be manipulated by the read row function. clientData is a pointer to caller specific information. The caller may specify a pointer to client data when calling the impZoomRow function. That pointer is passed to the read row function. At the caller's discretion this pointer may be set to NULL. A common use of the client data is to pass a pointer to a structure containing the image structure pointer and the channel number. The read row function must return -1 if it encountered an error while obtaining the row data and must return a value of 0 or greater if the function succeeds. numChannels Specifies the number of channels of image data that are packed on a single row. For example, if each row contains data for only a single channel, then numChannels should be specified as one. However, if each row contains RGB data packed together as RGBRGBRGB..., numChannels should be specified as three. filterType Specifies the type of filter to be used for resampling the image during zooming. The filter types available are: Filter Type Category __________________________ IMPImpulse Replicative IMPBox Filtered IMPTriangle Filtered IMPQuadratic Filtered IMPMitchell Filtered IMPGaussian Filtered Refer to the section entitled Filter Functions below for detailed information on the available filters. blurFactor Specifies a multiplier for the width of the filter. The default blur factor is 1.0. Higher factors increase the amount of blur present in the image. The impZoomRow function has the following parameters: zoom Pointer to a zoom operator structure obtained from a call to impCreateZoom. buffer Caller allocated buffer that will be filled with the zoomed image row data. The buffer should be allocated to accomodated dstXSize * numChannels * sizeof(short) bytes. row The desired zoomed row. Rows are numbered from 0 through dstYSize - 1. clientData Pointer to client data. This pointer is passed to the readRowFunc. A typical use of this is for passing a pointer to a structure containing the IMPImage pointer and the channel number. FILTER FUNCTIONS The resampling filters available for zooming are summarized below. Note that the span of the filter (i.e. x range) is expressed in terms of the original image not the zoomed image. Filter Type Function Span _______________________________________________________________ IMPImpulse Not Applicable IMPBox f(x) = 0.0 x < -0.5 f(x) = 1.0 -0.5 <= x < 0.5 f(x) = 0.0 x >= 0.5 IMPTriangle f(x) = 0.0 x < -1.0 f(x) = 1.0+x -1.0 <= x < 0.0 f(x) = 1.0-x 0.0 <= x < 1.0 f(x) = 0.0 x >= 1.0 IMPQuadratic f(x) = 0.0 x < -1.5 f(x) = 0.5*(x+1.5)^2 -1.5 <= x < -0.5 f(x) = 0.75-x^2 -0.5 <= x < 0.5 f(x) = 0.5*(x-1.5)^2 0.5 <= x < 1.5 f(x) = 0.0 x >= 1.5 IMPMitchell b = 1.0/3.0 c = 1.0/3.0 p0 = (6.0-2.0*b)/6.0 p2 = (-18.0+12.0*b+6.0*c)/6.0 p3 = (12.0-9.0*b-6.0*c)/6.0 q0 = (8.0*b+24.0*c)/6.0 q1 = (-12.0*b-48.0*c)/6.0 q2 = (6.0*b+30.0*c)/6.0 q3 = (-b-6.0*c)/6.0 f(x) = 0.0 x < -2.0 f(x) = q0-x*(q1-x*(q2-x*q3)) -2.0 <= x < -1.0 f(x) = p0+x*x*(p2-x*p3) -1.0 <= x < 0.0 f(x) = p0+x*x*(p2+x*p3) 0.0 <= x < 1.0 f(x) = q0+x*(q1+x*(q2+x*q3)) 1.0 <= x < 2.0 f(x) = 0.0 x >= 2.0 IMPGaussian a(x) = 1.0/exp((1.5*x)^2) b(x) = 1.0/exp(1.5^4) f(x) = a(x)-b(x) RETURN VALUE impCreateZoom returns a pointer to a zoom operator structure if execution was successful. NULL is returned and IMPerrno is set if an execution error has occurred. impZoomRow returns 0 if execution was successful. -1 is returned and IMPerrno is set if an execution error occurred. EXECUTION ERROR CODES In addition to the system error codes defined in errno.h, the following libimp specific error codes may be returned. impCreateZoom will fail under the following circumstances. IMP_ERR_MEMALLOC Dynamic memory allocation failed. This indicates an out-of-memory condition. impZoomRow will fail under the following circumstances. IMP_ERR_READROW Read row function failed. NOTES 1. The storage for the IMPZoom structure is allocated by the zoom operator creation function. This storage is deallocated by the impDestroyZoom function. The caller should not explicitly reallocate or deallocate any storage related to the image structure. 2. The fields of the IMPZoom structure are private and should not be modified by the caller. SEE ALSO libimp(3)