*kernel_info;
GetPPException;
- kernel_info=AcquireKernelInfo((const char *) NULL);
+ kernel_info=AcquireKernelInfo((const char *) NULL,exceptionInfo);
if (kernel_info != (KernelInfo *) NULL)
{
kernel_info->width=order_;
*kernel_info;
GetPPException;
- kernel_info=AcquireKernelInfo((const char *) NULL);
+ kernel_info=AcquireKernelInfo((const char *) NULL,exceptionInfo);
kernel_info->width=order_;
kernel_info->height=order_;
kernel_info->values=(MagickRealType *) AcquireAlignedMemory(order_,
MagickCore::Image
*newImage;
- kernel=AcquireKernelInfo(kernel_.c_str());
- if (kernel == (KernelInfo *)NULL)
- throwExceptionExplicit(OptionError,"Unable to parse kernel.");
-
GetPPException;
+ kernel=AcquireKernelInfo(kernel_.c_str(),exceptionInfo);
+ if (kernel == (KernelInfo *) NULL)
+ throwExceptionExplicit(OptionError,"Unable to parse kernel.");
newImage=MorphologyImage(constImage(),method_,iterations_,kernel,
exceptionInfo);
replaceImage(newImage);
MagickCore::Image
*newImage;
- kernel=AcquireKernelInfo(kernel_.c_str());
- if (kernel == (KernelInfo *)NULL)
- throwExceptionExplicit(OptionError,"Unable to parse kernel.");
GetPPException;
+ kernel=AcquireKernelInfo(kernel_.c_str(),exceptionInfo);
+ if (kernel == (KernelInfo *)NULL)
+ throwExceptionExplicit(OptionError,"Unable to parse kernel.");
SetPPChannelMask(channel_);
newImage=MorphologyImage(constImage(),method_,iterations_,kernel,
exceptionInfo);
assert(exception->signature == MagickSignature);
(void) FormatLocaleString(geometry,MaxTextExtent,
"blur:%.20gx%.20g;blur:%.20gx%.20g+90",radius,sigma,radius,sigma);
- kernel_info=AcquireKernelInfo(geometry);
+ kernel_info=AcquireKernelInfo(geometry,exception);
if (kernel_info == (KernelInfo *) NULL)
ThrowImageException(ResourceLimitError,"MemoryAllocationFailed");
blur_image=MorphologyApply(image,ConvolveMorphology,1,kernel_info,
assert(exception != (ExceptionInfo *) NULL);
assert(exception->signature == MagickSignature);
width=GetOptimalKernelWidth1D(radius,0.5);
- kernel_info=AcquireKernelInfo((const char *) NULL);
+ kernel_info=AcquireKernelInfo((const char *) NULL,exception);
if (kernel_info == (KernelInfo *) NULL)
ThrowImageException(ResourceLimitError,"MemoryAllocationFailed");
(void) ResetMagickMemory(kernel_info,0,sizeof(*kernel_info));
assert(exception != (ExceptionInfo *) NULL);
assert(exception->signature == MagickSignature);
width=GetOptimalKernelWidth1D(radius,sigma);
- kernel_info=AcquireKernelInfo((const char *) NULL);
+ kernel_info=AcquireKernelInfo((const char *) NULL,exception);
if (kernel_info == (KernelInfo *) NULL)
ThrowImageException(ResourceLimitError,"MemoryAllocationFailed");
kernel_info->width=width;
assert(exception->signature == MagickSignature);
(void) FormatLocaleString(geometry,MaxTextExtent,"gaussian:%.20gx%.20g",
radius,sigma);
- kernel_info=AcquireKernelInfo(geometry);
+ kernel_info=AcquireKernelInfo(geometry,exception);
if (kernel_info == (KernelInfo *) NULL)
ThrowImageException(ResourceLimitError,"MemoryAllocationFailed");
blur_image=MorphologyApply(image,ConvolveMorphology,1,kernel_info,
assert(exception != (ExceptionInfo *) NULL);
assert(exception->signature == MagickSignature);
width=GetOptimalKernelWidth2D(radius,sigma);
- kernel_info=AcquireKernelInfo((const char *) NULL);
+ kernel_info=AcquireKernelInfo((const char *) NULL,exception);
if (kernel_info == (KernelInfo *) NULL)
ThrowImageException(ResourceLimitError,"MemoryAllocationFailed");
(void) ResetMagickMemory(kernel_info,0,sizeof(*kernel_info));
*/
(void) FormatLocaleString(geometry,MaxTextExtent,
"blur:%.20gx%.20g;blur:%.20gx%.20g+90",radius,sigma,radius,sigma);
- kernel_info=AcquireKernelInfo(geometry);
+ kernel_info=AcquireKernelInfo(geometry,exception);
if (kernel_info == (KernelInfo *) NULL)
ThrowImageException(ResourceLimitError,"MemoryAllocationFailed");
edge_image=MorphologyApply(image,ConvolveMorphology,1,kernel_info,
return(kernel);
}
-static KernelInfo *ParseKernelName(const char *kernel_string)
+static KernelInfo *ParseKernelName(const char *kernel_string,
+ ExceptionInfo *exception)
{
char
token[MaxTextExtent];
break;
}
- kernel = AcquireKernelBuiltIn((KernelInfoType)type, &args);
+ kernel = AcquireKernelBuiltIn((KernelInfoType)type, &args, exception);
if ( kernel == (KernelInfo *) NULL )
return(kernel);
return(kernel);
}
-MagickExport KernelInfo *AcquireKernelInfo(const char *kernel_string)
+MagickExport KernelInfo *AcquireKernelInfo(const char *kernel_string,
+ ExceptionInfo *exception)
{
KernelInfo
*kernel,
*new_kernel;
char
+ *kernel_cache,
token[MaxTextExtent];
const char
if (kernel_string == (const char *) NULL)
return(ParseKernelArray(kernel_string));
p=kernel_string;
+ kernel_cache=(char *) NULL;
+ if (*kernel_string == '@')
+ {
+ kernel_cache=FileToString(kernel_string+1,~0UL,exception);
+ if (kernel_cache == (char *) NULL)
+ return((KernelInfo *) NULL);
+ p=(const char *) kernel_cache;
+ }
kernel=NULL;
-
while (GetMagickToken(p,NULL,token), *token != '\0')
{
/* ignore extra or multiple ';' kernel separators */
{
/* tokens starting with alpha is a Named kernel */
if (isalpha((int) ((unsigned char) *token)) != 0)
- new_kernel=ParseKernelName(p);
+ new_kernel=ParseKernelName(p,exception);
else /* otherwise a user defined kernel array */
new_kernel=ParseKernelArray(p);
break;
p++;
}
+ if (kernel_cache != (char *) NULL)
+ kernel_cache=DestroyString(kernel_cache);
return(kernel);
}
-
\f
/*
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
*/
MagickExport KernelInfo *AcquireKernelBuiltIn(const KernelInfoType type,
- const GeometryInfo *args)
+ const GeometryInfo *args,ExceptionInfo *exception)
{
KernelInfo
*kernel;
ScaleKernelInfo(kernel, (double) (1.0/2.0*MagickSQ2), NoValue);
break;
case 10:
- kernel=AcquireKernelInfo("FreiChen:11;FreiChen:12;FreiChen:13;FreiChen:14;FreiChen:15;FreiChen:16;FreiChen:17;FreiChen:18;FreiChen:19");
+ {
+ kernel=AcquireKernelInfo("FreiChen:11;FreiChen:12;FreiChen:13;FreiChen:14;FreiChen:15;FreiChen:16;FreiChen:17;FreiChen:18;FreiChen:19",exception);
if (kernel == (KernelInfo *) NULL)
return(kernel);
break;
+ }
case 1:
case 11:
kernel=ParseKernelArray("3: 1,0,-1 2,0,-2 1,0,-1");
}
case EdgesKernel:
{
- kernel=AcquireKernelInfo("ThinSE:482");
+ kernel=AcquireKernelInfo("ThinSE:482",exception);
if (kernel == (KernelInfo *) NULL)
return(kernel);
kernel->type = type;
}
case CornersKernel:
{
- kernel=AcquireKernelInfo("ThinSE:87");
+ kernel=AcquireKernelInfo("ThinSE:87",exception);
if (kernel == (KernelInfo *) NULL)
return(kernel);
kernel->type = type;
case 0:
default:
/* set of kernels to find all end of lines */
- return(AcquireKernelInfo("LineEnds:1>;LineEnds:2>"));
+ return(AcquireKernelInfo("LineEnds:1>;LineEnds:2>",exception));
case 1:
/* kernel for 4-connected line ends - no rotation */
kernel=ParseKernelArray("3: 0,0,- 0,1,1 0,0,-");
case 0:
default:
/* set of kernels to find all line junctions */
- return(AcquireKernelInfo("LineJunctions:1@;LineJunctions:2>"));
+ return(AcquireKernelInfo("LineJunctions:1@;LineJunctions:2>",exception));
case 1:
/* Y Junction */
kernel=ParseKernelArray("3: 1,-,1 -,1,- -,1,-");
/* Traditional Skeleton...
** A cyclically rotated single kernel
*/
- kernel=AcquireKernelInfo("ThinSE:482");
+ kernel=AcquireKernelInfo("ThinSE:482",exception);
if (kernel == (KernelInfo *) NULL)
return(kernel);
kernel->type = type;
** Corners of the traditional method made more forgiving,
** but the retain the same cyclic order.
*/
- kernel=AcquireKernelInfo("ThinSE:482; ThinSE:87x90;");
+ kernel=AcquireKernelInfo("ThinSE:482; ThinSE:87x90;",exception);
if (kernel == (KernelInfo *) NULL)
return(kernel);
if (kernel->next == (KernelInfo *) NULL)
** by Dan S. Bloomberg, available on Leptonica, Selected Papers,
** http://www.leptonica.com/papers/conn.pdf
*/
- kernel=AcquireKernelInfo(
- "ThinSE:41; ThinSE:42; ThinSE:43");
+ kernel=AcquireKernelInfo("ThinSE:41; ThinSE:42; ThinSE:43",
+ exception);
if (kernel == (KernelInfo *) NULL)
return(kernel);
kernel->type = type;
} KernelInfo;
extern MagickExport KernelInfo
- *AcquireKernelInfo(const char *),
- *AcquireKernelBuiltIn(const KernelInfoType,const GeometryInfo *),
+ *AcquireKernelInfo(const char *,ExceptionInfo *),
+ *AcquireKernelBuiltIn(const KernelInfoType,const GeometryInfo *,
+ ExceptionInfo *),
*CloneKernelInfo(const KernelInfo *),
*DestroyKernelInfo(KernelInfo *);
i++;
if (i == (ssize_t) argc)
ThrowConvertException(OptionError,"MissingArgument",option);
- kernel_info=AcquireKernelInfo(argv[i]);
+ kernel_info=AcquireKernelInfo(argv[i],exception);
if (kernel_info == (KernelInfo *) NULL)
ThrowConvertInvalidArgumentException(option,argv[i]);
kernel_info=DestroyKernelInfo(kernel_info);
i++;
if (i == (ssize_t) argc)
ThrowConvertException(OptionError,"MissingArgument",option);
- kernel_info=AcquireKernelInfo(argv[i]);
+ kernel_info=AcquireKernelInfo(argv[i],exception);
if (kernel_info == (KernelInfo *) NULL)
ThrowConvertInvalidArgumentException(option,argv[i]);
kernel_info=DestroyKernelInfo(kernel_info);
i++;
if (i == (ssize_t) argc)
ThrowConvertException(OptionError,"MissingArgument",option);
- kernel_info=AcquireKernelInfo(argv[i]);
+ kernel_info=AcquireKernelInfo(argv[i],exception);
if (kernel_info == (KernelInfo *) NULL)
ThrowConvertInvalidArgumentException(option,argv[i]);
kernel_info=DestroyKernelInfo(kernel_info);
*kernel;
(void) SyncImageSettings(mogrify_info,*image,exception);
- kernel=AcquireKernelInfo(argv[i+1]);
+ kernel=AcquireKernelInfo(argv[i+1],exception);
if (kernel == (KernelInfo *) NULL)
break;
/* FUTURE: check on size of the matrix */
*kernel_info;
(void) SyncImageSettings(mogrify_info,*image,exception);
- kernel_info=AcquireKernelInfo(argv[i+1]);
+ kernel_info=AcquireKernelInfo(argv[i+1],exception);
if (kernel_info == (KernelInfo *) NULL)
break;
/* kernel_info->bias=(*image)->bias; -- FUTURE: check this path! */
GetMagickToken(p,&p,token);
if ((*p != '\0'))
iterations=(ssize_t) StringToLong(p);
- kernel=AcquireKernelInfo(argv[i+2]);
+ kernel=AcquireKernelInfo(argv[i+2],exception);
if (kernel == (KernelInfo *) NULL)
{
(void) ThrowMagickException(exception,GetMagickModule(),
i++;
if (i == (ssize_t) argc)
ThrowMogrifyException(OptionError,"MissingArgument",option);
- kernel_info=AcquireKernelInfo(argv[i]);
+ kernel_info=AcquireKernelInfo(argv[i],exception);
if (kernel_info == (KernelInfo *) NULL)
ThrowMogrifyInvalidArgumentException(option,argv[i]);
kernel_info=DestroyKernelInfo(kernel_info);
i++;
if (i == (ssize_t) argc)
ThrowMogrifyException(OptionError,"MissingArgument",option);
- kernel_info=AcquireKernelInfo(argv[i]);
+ kernel_info=AcquireKernelInfo(argv[i],exception);
if (kernel_info == (KernelInfo *) NULL)
ThrowMogrifyInvalidArgumentException(option,argv[i]);
kernel_info=DestroyKernelInfo(kernel_info);
i++;
if (i == (ssize_t) argc)
ThrowMogrifyException(OptionError,"MissingArgument",option);
- kernel_info=AcquireKernelInfo(argv[i]);
+ kernel_info=AcquireKernelInfo(argv[i],exception);
if (kernel_info == (KernelInfo *) NULL)
ThrowMogrifyInvalidArgumentException(option,argv[i]);
kernel_info=DestroyKernelInfo(kernel_info);
%
% The format of the WandSimpleOperatorImages method is:
%
-% void CLISimpleOperatorImages(MagickCLI *cli_wand,
-% const char *option, const char *arg1, const char *arg2)
+% void CLISimpleOperatorImages(MagickCLI *cli_wand,const char *option,
+% const char *arg1, const char *arg2,ExceptionInfo *exception)
%
% A description of each parameter follows:
%
return the Image pointer to the first image in list.
*/
static MagickBooleanType CLISimpleOperatorImage(MagickCLI *cli_wand,
- const char *option, const char *arg1n, const char *arg2n)
+ const char *option, const char *arg1n, const char *arg2n,
+ ExceptionInfo *exception)
{
Image *
new_image;
KernelInfo
*kernel;
- kernel=AcquireKernelInfo(arg1);
+ kernel=AcquireKernelInfo(arg1,exception);
if (kernel == (KernelInfo *) NULL)
CLIWandExceptArgBreak(OptionError,"InvalidArgument",option,arg1);
new_image=ColorMatrixImage(_image,kernel,_exception);
KernelInfo
*kernel_info;
- kernel_info=AcquireKernelInfo(arg1);
+ kernel_info=AcquireKernelInfo(arg1,exception);
if (kernel_info == (KernelInfo *) NULL)
CLIWandExceptArgBreak(OptionError,"InvalidArgument",option,arg1);
new_image=MorphologyImage(_image,CorrelateMorphology,1,kernel_info,
if (LocaleCompare("gaussian",option+1) == 0)
{
CLIWandWarnReplaced("-gaussian-blur");
- CLISimpleOperatorImage(cli_wand,"-gaussian-blur",arg1,NULL);
+ CLISimpleOperatorImage(cli_wand,"-gaussian-blur",arg1,NULL,exception);
}
if (LocaleCompare("geometry",option+1) == 0)
{
if (LocaleCompare("map",option+1) == 0)
{
CLIWandWarnReplaced("-remap");
- CLISimpleOperatorImage(cli_wand,"-remap",NULL,NULL);
+ CLISimpleOperatorImage(cli_wand,"-remap",NULL,NULL,exception);
break;
}
if (LocaleCompare("mask",option+1) == 0)
if (LocaleCompare("median",option+1) == 0)
{
CLIWandWarnReplaced("-statistic Median");
- CLISimpleOperatorImage(cli_wand,"-statistic","Median",arg1);
+ CLISimpleOperatorImage(cli_wand,"-statistic","Median",arg1,exception);
break;
}
if (LocaleCompare("mode",option+1) == 0)
{
/* FUTURE: note this is also a special "montage" option */
CLIWandWarnReplaced("-statistic Mode");
- CLISimpleOperatorImage(cli_wand,"-statistic","Mode",arg1);
+ CLISimpleOperatorImage(cli_wand,"-statistic","Mode",arg1,exception);
break;
}
if (LocaleCompare("modulate",option+1) == 0)
GetMagickToken(p,&p,token);
parse=ParseCommandOption(MagickMorphologyOptions,MagickFalse,token);
if ( parse < 0 )
- CLIWandExceptArgBreak(OptionError,"UnrecognizedFunction",
- option,arg1);
+ CLIWandExceptArgBreak(OptionError,"UnrecognizedFunction",option,
+ arg1);
iterations=1L;
GetMagickToken(p,&p,token);
if ((*p == ':') || (*p == ','))
GetMagickToken(p,&p,token);
if ((*p != '\0'))
iterations=(ssize_t) StringToLong(p);
- kernel=AcquireKernelInfo(arg2);
+ kernel=AcquireKernelInfo(arg2,exception);
if (kernel == (KernelInfo *) NULL)
- CLIWandExceptArgBreak(OptionError,"UnabletoParseKernel",
- option,arg2);
- new_image=MorphologyImage(_image,(MorphologyMethod)parse,
- iterations,kernel,_exception);
+ CLIWandExceptArgBreak(OptionError,"UnabletoParseKernel",option,arg2);
+ new_image=MorphologyImage(_image,(MorphologyMethod)parse,iterations,
+ kernel,_exception);
kernel=DestroyKernelInfo(kernel);
break;
}
CLIWandExceptArgBreak(OptionError,"InvalidArgument",option,arg1);
if ((flags & SigmaValue) == 0)
geometry_info.sigma=1.0;
- new_image=MotionBlurImage(_image,geometry_info.rho,
- geometry_info.sigma,geometry_info.xi,_exception);
+ new_image=MotionBlurImage(_image,geometry_info.rho,geometry_info.sigma,
+ geometry_info.xi,_exception);
break;
}
CLIWandExceptionBreak(OptionError,"UnrecognizedOption",option);
if (IfNormalOp)
{
CLIWandWarnReplaced("-statistic NonPeak");
- CLISimpleOperatorImage(cli_wand,"-statistic","NonPeak",arg1);
+ CLISimpleOperatorImage(cli_wand,"-statistic","NonPeak",arg1,exception);
break;
}
parse=ParseCommandOption(MagickNoiseOptions,MagickFalse,arg1);
if (IfPlusOp) {
RandomInfo
- *random_info;
+ *random_info;
random_info=AcquireRandomInfo();
angle=22.5*(GetPseudoRandomValue(random_info)-0.5);
if (LocaleCompare("recolor",option+1) == 0)
{
CLIWandWarnReplaced("-color-matrix");
- CLISimpleOperatorImage(cli_wand,"-color-matrix",arg1,NULL);
+ CLISimpleOperatorImage(cli_wand,"-color-matrix",arg1,NULL,exception);
}
if (LocaleCompare("remap",option+1) == 0)
{
}
WandPrivate MagickBooleanType CLISimpleOperatorImages(MagickCLI *cli_wand,
- const char *option,const char *arg1,const char *arg2)
+ const char *option,const char *arg1,const char *arg2,ExceptionInfo *exception)
{
#if !USE_WAND_METHODS
size_t
cli_wand->wand.images=GetFirstImageInList(cli_wand->wand.images);
while (1) {
i++;
- CLISimpleOperatorImage(cli_wand, option, arg1, arg2);
+ CLISimpleOperatorImage(cli_wand, option, arg1, arg2,exception);
if ( cli_wand->wand.images->next == (Image *) NULL )
break;
cli_wand->wand.images=cli_wand->wand.images->next;
#else
MagickResetIterator(&cli_wand->wand);
while ( IfMagickTrue(MagickNextImage(&cli_wand->wand)) )
- CLISimpleOperatorImage(cli_wand, option, arg1, arg2);
+ CLISimpleOperatorImage(cli_wand, option, arg1, arg2,exception);
MagickResetIterator(&cli_wand->wand);
#endif
return(MagickTrue);
/* Operators which loop of individual images, simply */
if ( (option_type & SimpleOperatorFlag) != 0 &&
cli_wand->wand.images != (Image *)NULL) /* temp hack */
- CLISimpleOperatorImages(cli_wand, option, arg1, arg2);
+ {
+ ExceptionInfo *exception=AcquireExceptionInfo();
+ CLISimpleOperatorImages(cli_wand, option, arg1, arg2,exception);
+ exception=DestroyExceptionInfo(exception);
+ }
/* Operators that work on the image list as a whole */
if ( (option_type & ListOperatorFlag) != 0 )
size_t
order;
- kernel=AcquireKernelInfo((const char *) NULL);
+ kernel=AcquireKernelInfo((const char *) NULL,exception);
if (kernel == (KernelInfo *) NULL)
break;
av=(AV *) argument_list[0].array_reference;
argument_list[2].string_reference);
if (attribute_flag[3] != 0)
{
- kernel=AcquireKernelInfo(argument_list[3].string_reference);
+ kernel=AcquireKernelInfo(argument_list[3].string_reference,
+ exception);
if (kernel == (KernelInfo *) NULL)
break;
}
color_matrix[j]=(double) SvNV(*(av_fetch(av,j,0)));
for ( ; j < (ssize_t) (order*order); j++)
color_matrix[j]=0.0;
- kernel_info=AcquireKernelInfo((const char *) NULL);
+ kernel_info=AcquireKernelInfo((const char *) NULL,exception);
if (kernel_info == (KernelInfo *) NULL)
break;
kernel_info->width=order;
if (attribute_flag[0] == 0)
break;
- kernel=AcquireKernelInfo(argument_list[0].string_reference);
+ kernel=AcquireKernelInfo(argument_list[0].string_reference,exception);
if (kernel == (KernelInfo *) NULL)
break;
if (attribute_flag[1] != 0)
size_t
order;
- kernel=AcquireKernelInfo((const char *) NULL);
+ kernel=AcquireKernelInfo((const char *) NULL,exception);
if (kernel == (KernelInfo *) NULL)
break;
av=(AV *) argument_list[0].array_reference;
argument_list[2].string_reference);
if (attribute_flag[3] != 0)
{
- kernel=AcquireKernelInfo(argument_list[3].string_reference);
+ kernel=AcquireKernelInfo(argument_list[3].string_reference,
+ exception);
if (kernel == (KernelInfo *) NULL)
break;
}
color_matrix[j]=(double) SvNV(*(av_fetch(av,j,0)));
for ( ; j < (ssize_t) (order*order); j++)
color_matrix[j]=0.0;
- kernel_info=AcquireKernelInfo((const char *) NULL);
+ kernel_info=AcquireKernelInfo((const char *) NULL,exception);
if (kernel_info == (KernelInfo *) NULL)
break;
kernel_info->width=order;
if (attribute_flag[0] == 0)
break;
- kernel=AcquireKernelInfo(argument_list[0].string_reference);
+ kernel=AcquireKernelInfo(argument_list[0].string_reference,exception);
if (kernel == (KernelInfo *) NULL)
break;
if (attribute_flag[1] != 0)