[cairo] [PATCH pixman 01/11] demos/scale: Compute filter size using boundary of xformed ellipse, not rectangle

Derek Foreman derekf at osg.samsung.com
Thu Sep 11 07:46:57 PDT 2014


On 10/09/14 09:01 PM, Bill Spitzak wrote:
> This is much more accurate and less blurry. In particular the filtering does
> not change as the image is rotated.
> ---
>  demos/scale.c |   43 ++-----------------------------------------
>  1 file changed, 2 insertions(+), 41 deletions(-)
> 
> diff --git a/demos/scale.c b/demos/scale.c
> index d00307e..0b6c715 100644
> --- a/demos/scale.c
> +++ b/demos/scale.c
> @@ -55,50 +55,11 @@ get_widget (app_t *app, const char *name)
>      return widget;
>  }
>  
> -static double
> -min4 (double a, double b, double c, double d)
> -{
> -    double m1, m2;
> -
> -    m1 = MIN (a, b);
> -    m2 = MIN (c, d);
> -    return MIN (m1, m2);
> -}
> -
> -static double
> -max4 (double a, double b, double c, double d)
> -{
> -    double m1, m2;
> -
> -    m1 = MAX (a, b);
> -    m2 = MAX (c, d);
> -    return MAX (m1, m2);
> -}
> -
>  static void
>  compute_extents (pixman_f_transform_t *trans, double *sx, double *sy)
>  {
> -    double min_x, max_x, min_y, max_y;
> -    pixman_f_vector_t v[4] =
> -    {
> -	{ { 1, 1, 1 } },
> -	{ { -1, 1, 1 } },
> -	{ { -1, -1, 1 } },
> -	{ { 1, -1, 1 } },
> -    };
> -
> -    pixman_f_transform_point (trans, &v[0]);
> -    pixman_f_transform_point (trans, &v[1]);
> -    pixman_f_transform_point (trans, &v[2]);
> -    pixman_f_transform_point (trans, &v[3]);
> -
> -    min_x = min4 (v[0].v[0], v[1].v[0], v[2].v[0], v[3].v[0]);
> -    max_x = max4 (v[0].v[0], v[1].v[0], v[2].v[0], v[3].v[0]);
> -    min_y = min4 (v[0].v[1], v[1].v[1], v[2].v[1], v[3].v[1]);
> -    max_y = max4 (v[0].v[1], v[1].v[1], v[2].v[1], v[3].v[1]);
> -
> -    *sx = (max_x - min_x) / 2.0;
> -    *sy = (max_y - min_y) / 2.0;
> +  *sx = hypot (trans->m[0][0], trans->m[0][1]) / trans->m[2][2];
> +  *sy = hypot (trans->m[1][0], trans->m[1][1]) / trans->m[2][2];

Whitespace damage - the rest of the file is 4 space indent.

>  }
>  
>  typedef struct
> 



More information about the cairo mailing list