[magick-developers] resize_filter always UndefinedFilter(LanczosFilter/MitchellFilter/Point)
Thomas.Stegemann at materna.de
Thomas.Stegemann at materna.de
Fri Feb 6 03:12:38 PST 2009
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
More information about the Magick-developers
mailing list