| .TH IM_IOCHECK 3 "11 April 1990" |
| .SH NAME |
| im_demand_hint \- hint on demand style for im_generate(3) |
| .SH SYNOPSIS |
| #include <vips/vips.h> |
| |
| int im_demand_hint( im, hint, in1, in2, ..., NULL ) |
| .br |
| IMAGE *im, *in1, *in2, ...; |
| .br |
| im_demand_type hint; |
| |
| int im_demand_hint_array( im, hint, in ) |
| .br |
| IMAGE *im, **in; |
| .br |
| im_demand_type hint; |
| .SH DESCRIPTION |
| .B im_demand_hint(3) |
| suggests to im_generate(3) the sorts of demand with which this image processing |
| operation would be happiest. |
| |
| .B im |
| is the image this operation is generating. |
| .B hint |
| is the demand style this operation would like (see below), and |
| .B in1 ... |
| is a NULL-terminated list of the image upon which this output image directly |
| depends, that is, the images which this operation will call im_prepare(3) for. |
| |
| This list of parent images is necessary, as im_demand_hint(3) needs to know |
| what demand style this operation's ancestors have requested. If an ancestor of |
| this operation has specified a very restrictive demand style, then this |
| operation must fall back to that restrictive style and ignore the hint given |
| in this call to im_demand_hint(3). |
| |
| VIPS currently supports three demand styles. More may be added in the future. |
| These demand styles are given below in order of increasing restrictiveness. |
| When demanding output from a pipeline, im_generate(3) will use the most |
| restrictive of the styles requested by the operations in the pipeline. |
| |
| IM_THINSTRIP |
| .br |
| This operation would like to output strips the width of the image and a few |
| pels high. This is option suitable for point-to-point operations, such as |
| those in the arithmetic package. |
| |
| This option is only efficient for cases where each output pel depends upon the |
| pel in the corresponding position in the input image. |
| |
| IM_FATSTRIP |
| .br |
| This operation would like to output strips the width of the image and as high |
| as possible. This option is suitable for area operations which do not |
| violently transform coordinates, such as im_conv(3). |
| |
| IM_SMALLTILE |
| .br |
| This is the most general demand format, and is the default. Output is |
| demanded in small (around 100x100 pel) sections. This style works reasonably |
| efficiently, even for bizzare operations like 45 degree rotate. |
| |
| IM_ANY |
| .br |
| This image is not being demand-read from a disc file (even indirectly) so any |
| demand style is OK. It's used for things like |
| .B im_black(3) |
| where the pixels are calculated. |
| |
| .B |
| im_demand_hint_array(3) |
| works exactly as im_demand_hint(3), but expects a pointer to a NULL-terminated |
| array of parent images as its third argument. You may use |
| im_allocate_input_array(3), if you wish, to build this structure. |
| |
| As an example, here is part of the code for im_invert(3). In this operation, |
| each output pel depends upon the corresponding input pel. In other words, |
| there is no coordinate transformation in im_prepare(3). This style of |
| operation is most efficient with IM_THINSTRIP IO. |
| |
| int im_invert( IMAGE *in, IMAGE *out ) |
| .br |
| { |
| .br |
| if( in->Coding != NOCODING ) { |
| .br |
| im_errormsg( "im_invert: input coded" ); |
| .br |
| return( -1 ); |
| .br |
| } |
| .br |
| if( in->BandFmt != FMTUCHAR ) { |
| .br |
| im_errormsg( "im_invert: input not UCHAR" ); |
| .br |
| return( -1 ); |
| .br |
| } |
| .br |
| if( im_piocheck( in, out ) ) |
| .br |
| return( -1 ); |
| .br |
| if( im_cp_desc( out, in ) ) |
| .br |
| return( -1 ); |
| .br |
| if( im_demand_hint( out, IM_THINSTRIP, in, NULL ) ) |
| .br |
| return( -1 ); |
| .br |
| if( im_generate( out, |
| .br |
| im_start_one, inv_gen, im_stop_one, in, NULL ) ) |
| .br |
| return( -1 ); |
| .br |
| return( 0 ); |
| .br |
| } |
| |
| .SH RETURN VALUE |
| All functions returns 0 on success and non-zero on error. |
| .SH SEE ALSO |
| im_generate(3), im_prepare(3). |
| .SH COPYRIGHT |
| National Gallery |
| .SH AUTHOR |
| J. Cupitt \- 3/9/93 |