Beispiel #1
0
static int
vips_gaussnoise_gen( VipsRegion *or, void *seq, void *a, void *b,
	gboolean *stop )
{
	VipsGaussnoise *gaussnoise = (VipsGaussnoise *) a;
	int sz = VIPS_REGION_N_ELEMENTS( or );

	int y;

	for( y = 0; y < or->valid.height; y++ ) {
		float *q = (float *) VIPS_REGION_ADDR( or, 
			or->valid.left, y + or->valid.top );

		int x;

		for( x = 0; x < sz; x++ ) {
			double sum;
			int i;

			sum = 0.0;
			for( i = 0; i < 12; i++ ) 
				sum += g_random_double(); 

			q[x] = (sum - 6.0) * gaussnoise->sigma + 
				gaussnoise->mean;
		}
	}

	return( 0 );
}
Beispiel #2
0
/* Do a map.
 */
static int 
vips_maplut_gen( VipsRegion *or, void *vseq, void *a, void *b, 
	gboolean *stop )
{
	VipsMaplutSequence *seq = (VipsMaplutSequence *) vseq;
	VipsImage *in = (VipsImage *) a;
	VipsMaplut *maplut = (VipsMaplut *) b;
	VipsRegion *ir = seq->ir;
	VipsRect *r = &or->valid;
	int le = r->left;
	int to = r->top;
	int bo = VIPS_RECT_BOTTOM( r );
	int np = r->width;			/* Pels across region */
	int ne = VIPS_REGION_N_ELEMENTS( or );	/* Number of elements */

	int x, y, z, i;

	if( vips_region_prepare( ir, r ) )
		return( -1 );

	if( maplut->nb == 1 )
		/* One band lut.
		 */
		outer_switch( loop1, loop1c, loop1g, loop1cg ) 
	else 
		/* Many band lut.
		 */
		if( in->Bands == 1 )
			/* ... but 1 band input.
			 */
			outer_switch( loop1m, loop1cm, loop1gm, loop1cgm ) 
		else
			outer_switch( loop, loopc, loopg, loopcg )

	return( 0 );
}