Esempio n. 1
0
IMAGE *apply_filter(IMAGE *original, FILTER *filter) {
	IMAGE *result = image_create_blank(original);

	int x, y;
	for(y = 0; y < original->height; y++)
		for(x = 0; x < original->width; x++)
			apply_to_pixel(x, y, original, result, filter);

	return result;
}
Esempio n. 2
0
IMAGE *master_recv_blur(IMAGE *src, int radius, int n_slaves) 
{
	//Allocate mem for the new image
	IMAGE *result = image_create_blank(src);

	//Copy first and last "radius" rows
	int i, j;
	for(i = 0; i < radius; i++) 
		for(j = 0; j < src->width; j++) {
			(result->pixels)[i][j] = (src->pixels)[i][j];
			(result->pixels)[src->height-1-i][j] = (src->pixels)[src->height-1-i][j];
		}

	//Init metadata
	METADATA meta;
	meta_init(&meta, src->width, src->height, 0, radius, 0);

	//Prepare pixel type
	MPI_Datatype PIXEL;
	create_pixel_type(&PIXEL);

	//Calculate the total data size(ignoring the endges)
	int data_size = src->height - 2*meta.radius;
	int index = 0;
	const int max_size = src->height / n_slaves;

	//Update and send the metadata
	for(i = 0; i < n_slaves && data_size != 0; i++) {
		//Update metadata
		master_update_metadata(&meta, &data_size, max_size);

		//Recv data
		recv_subimage(result, &PIXEL, i+1, index+radius, meta.height-radius);

		//Update index
		index += meta.height - 2*meta.radius;
	}

	return result;
}