<2022-03-18 Fri>
关于gpuSupportedResizeWeighting()的代码能否省略
在ImageMagick的AccelerateResizeImage()函数中有这样的一段代码被注释掉了:
// if ((gpuSupportedResizeWeighting(GetResizeFilterWeightingType(
// resizeFilter)) == MagickFalse) ||
// (gpuSupportedResizeWeighting(GetResizeFilterWindowWeightingType(
// resizeFilter)) == MagickFalse))
// return((Image *) NULL);
我认为这段代码可以省略,因为它的目的就是为了检查ImageMagick的ResizeFilter类型中的ResizeWeightingFunctionType类型的成员值:
struct _ResizeFilter
{
double
(*filter)(const double,const ResizeFilter *),
(*window)(const double,const ResizeFilter *),
support, /* filter region of support - the filter support limit */
window_support, /* window support, usally equal to support (expert only) */
scale, /* dimension scaling to fit window support (usally 1.0) */
blur, /* x-scale (blur-sharpen) */
coefficient[7]; /* cubic coefficents for BC-cubic filters */
ResizeWeightingFunctionType
filterWeightingType,
windowWeightingType;
size_t
signature;
};
是否在supportedResizeWeighting数组中:
static const ResizeWeightingFunctionType supportedResizeWeighting[] =
{
BoxWeightingFunction,
TriangleWeightingFunction,
HannWeightingFunction,
HammingWeightingFunction,
BlackmanWeightingFunction,
CubicBCWeightingFunction,
SincWeightingFunction,
SincFastWeightingFunction,
LastWeightingFunction
};
很明显这个数组就是ImageMagick支持GPU的窗函数集合。在GraphicsMagick中我只在ResizeImage()函数中找到相近的定义:
static const FilterInfo
filters[SincFilter+1] =
{
{ Box, 0.0 },
{ Box, 0.0 },
{ Box, 0.5 },
{ Triangle, 1.0 },
{ Hermite, 1.0 },
{ Hanning, 1.0 },
{ Hamming, 1.0 },
{ Blackman, 1.0 },
{ Gaussian, 1.25 },
{ Quadratic, 1.5 },
{ Cubic, 2.0 },
{ Catrom, 2.0 },
{ Mitchell, 2.0 },
{ Lanczos, 3.0 },
{ BlackmanBessel, 3.2383 },
{ BlackmanSinc, 4.0 }
};
明显可见,GraphicsMagick中处理相对于ImageMagick简单多了,所以上面的代码我仍然保持它被注释状态。
文章讨论了ImageMagick中关于`gpuSupportedResizeWeighting()`的代码,质疑其是否可以省略,因为该代码主要检查ResizeFilter是否支持GPU加速的窗函数。作者指出GraphicsMagick的实现更为简洁,但决定保持注释状态。
489

被折叠的 条评论
为什么被折叠?



