Hello,

for inline images always the UndefinedFilter resize_filter is used:

In DrawPrimitive (draw.c) the clone_info is set to default values (the default 
for filter is UndefinedFilter)
and with this settings the inline image is created.

>MagickExport MagickBooleanType DrawPrimitive(Image *image,
>  const DrawInfo *draw_info,const PrimitiveInfo *primitive_info)> [...]
>     case ImagePrimitive:
[...]
>       clone_info=AcquireImageInfo();
>       if (LocaleNCompare(primitive_info->text,"data:",5) == 0)
>         composite_image=ReadInlineImage(clone_info,primitive_info->text,
>           &image->exception);
>       else
>         {
>           (void) CopyMagickString(clone_info->filename,primitive_info->text,
>             MaxTextExtent);
>           composite_image=ReadImage(clone_info,&image->exception);
>         }
[...]
Then the image with the default settings is resized with TransformImage,
>         (void) TransformImage(&composite_image,(char *) NULL,geometry);


TransformImage (transform.c) calls ZoomImage,
>MagickExport MagickBooleanType TransformImage(Image **image,
>  const char *crop_geometry,const char *image_geometry)
[...]
>  resize_image=ZoomImage(transform_image,geometry.width,geometry.height,
>    &(*image)->exception);


ZoomImage (resize.c) calls ResizeImage,
>MagickExport Image *ZoomImage(const Image *image,const unsigned long columns,
>  const unsigned long rows,ExceptionInfo *exception)
[...]
>  zoom_image=ResizeImage(image,columns,rows,image->filter,image->blur,
>    exception);


and in ResizeImage (resize.c) the filter of the inline image is used (always 
UndefinedFilter so the Lanczos-,Point- or Mitchell-Filter is used, depending of 
the resize factor).
>MagickExport Image *ResizeImage(const Image *image,const unsigned long columns,
>  const unsigned long rows,const FilterTypes filter,const double blur,
>  ExceptionInfo *exception)
[...]
>  filter_type=LanczosFilter;
>  if (filter != UndefinedFilter)
>    filter_type=filter;
>  else
>    if ((x_factor == 1.0) && (y_factor == 1.0))
>      filter_type=PointFilter;
>    else
>      if ((image->storage_class == PseudoClass) ||
>          (image->matte != MagickFalse) || ((x_factor*y_factor) > 1.0))
>        filter_type=MitchellFilter;


I think it is more reasonable to use the the filter of the image passed to 
DrawPrimitive, isn't it?
In draw.c:
>         composite_image->filter= image->filter;
>         (void) TransformImage(&composite_image,(char *) NULL,geometry);

Best regards
Thomas Stegemann


_______________________________________________
Magick-developers mailing list
Magick-developers@imagemagick.org
http://studio.imagemagick.org/mailman/listinfo/magick-developers

Reply via email to