Exemplo n.º 1
0
int GP_FilterGaussianBlurEx(const GP_Context *src,
                            GP_Coord x_src, GP_Coord y_src,
                            GP_Size w_src, GP_Size h_src,
                            GP_Context *dst,
                            GP_Coord x_dst, GP_Coord y_dst,
                            float sigma_x, float sigma_y,
                            GP_ProgressCallback *callback)
{
	GP_CHECK(src->pixel_type == dst->pixel_type);

	/* Check that destination is large enough */
	GP_CHECK(x_dst + (GP_Coord)w_src <= (GP_Coord)dst->w);
	GP_CHECK(y_dst + (GP_Coord)h_src <= (GP_Coord)dst->h);

	return GP_FilterGaussianBlur_Raw(src, x_src, y_src, w_src, h_src,
	                                 dst, x_dst, y_dst,
	                                 sigma_x, sigma_y, callback);
}
Exemplo n.º 2
0
void GP_BlitXYXY(const GP_Context *src,
                 GP_Coord x0, GP_Coord y0, GP_Coord x1, GP_Coord y1,
                 GP_Context *dst, GP_Coord x2, GP_Coord y2)
{
	/* Normalize source rectangle */
	if (x1 < x0)
		GP_SWAP(x0, x1);

	if (y1 < y0)
		GP_SWAP(y0, y1);

	/* All coordinates are inside of src the context */
	GP_CHECK(x0 < (GP_Coord)GP_ContextW(src));
	GP_CHECK(y0 < (GP_Coord)GP_ContextH(src));
	GP_CHECK(x1 < (GP_Coord)GP_ContextW(src));
	GP_CHECK(y1 < (GP_Coord)GP_ContextH(src));

	/* Destination is big enough */
	GP_CHECK(x2 + (x1 - x0) < (GP_Coord)GP_ContextW(dst));
	GP_CHECK(y2 + (y1 - y0) < (GP_Coord)GP_ContextH(dst));

	GP_BlitXYXY_Fast(src, x0, y0, x1, y1, dst, x2, y2);
}