197 (void) memset(fx_info,0,
sizeof(*fx_info));
210 for ( ; next != (
Image *) NULL; next=next->
next)
217 fx_info->
file=stderr;
364 if (
object != (
double *) NULL)
370 if (
object == (
double *) NULL)
374 fx_info->images->filename);
400 for (p=symbol; (*p !=
'.') && (*p !=
'\0'); p++) ;
415 (double) channel,symbol);
417 if (value != (
const double *) NULL)
430 statistic=(double) depth;
456 (void)
GetImageMean(image,&mean,&standard_deviation,exception);
491 (void)
GetImageMean(image,&mean,&standard_deviation,exception);
492 statistic=standard_deviation;
503 const ssize_t,
const char *,
const size_t,
double *,
ExceptionInfo *);
506 const char *name,
const size_t length)
514 for (i=0; i <= length; i++)
515 if (expression[i] ==
'\0')
517 c=expression[length];
519 ((isspace((
int) ((
unsigned char) c)) == 0) || (c ==
'(')))
524 static inline double FxGCD(
const double alpha,
const double beta)
527 return(
FxGCD(beta,alpha));
528 if (fabs(beta) < 0.001)
530 return(
FxGCD(beta,alpha-beta*floor(alpha/beta)));
543 subexpression=expression;
544 while ((*subexpression !=
'\0') &&
545 ((level != 1) || (strchr(
")",(
int) *subexpression) == (
char *) NULL)))
547 if (strchr(
"(",(
int) *subexpression) != (
char *) NULL)
550 if (strchr(
")",(
int) *subexpression) != (
char *) NULL)
554 if (*subexpression ==
'\0')
556 "UnbalancedParenthesis",
"`%s'",expression);
557 return(subexpression);
561 const ssize_t x,
const ssize_t y,
const char *expression,
const size_t depth,
602 if (isalpha((
int) ((
unsigned char) *(p+1))) == 0)
608 if (strchr(
"suv",(
int) *p) != (
char *) NULL)
618 case 'u': i=0;
break;
619 case 'v': i=1;
break;
626 for (p++; *p !=
'\0'; )
641 depth,&beta,exception);
649 if ((*p ==
'p') && (isalpha((
int) ((
unsigned char) *(p+1))) == 0))
656 for (p++; *p !=
'\0'; )
671 depth,&beta,exception);
682 for (p++; *p !=
'\0'; )
697 depth,&beta,exception);
709 if (image == (
Image *) NULL)
712 "NoSuchImage",
"`%s'",expression);
718 point.
x,point.
y,&pixel,exception);
720 if ((*p !=
'\0') && (*(p+1) !=
'\0') && (*(p+2) !=
'\0') &&
734 for (q=name+length-1; q > name; q--)
745 if ((*q !=
'\0') && (*(q+1) !=
'\0') && (*(q+2) !=
'\0') &&
787 ImageError,
"ColorSeparatedImageRequired",
"`%s'",
814 "UnableToParseExpression",
"`%s'",p);
852 return(channel_info.
rho);
858 return(channel_info.
sigma);
864 return(channel_info.
xi);
870 return(channel_info.
psi);
876 return(channel_info.
chi);
887 return(channel_info.
rho);
893 return(channel_info.
sigma);
899 return(channel_info.
xi);
905 return(channel_info.
chi);
911 return(channel_info.
psi);
934 return((
double) image->
extent);
968 return((
double) image->
rows);
1035 luma=0.212656*pixel.
red+0.715158*pixel.
green+0.072186*pixel.
blue;
1043 luminence=0.212656*pixel.
red+0.715158*pixel.
green+0.072186*pixel.
blue;
1085 return((
double) image->
page.
x);
1087 return((
double) image->
page.
y);
1098 return((
double) image->
quality);
1143 return((
double) image->
columns);
1164 if (value != (
const double *) NULL)
1167 if (artifact != (
const char *) NULL)
1170 "UndefinedVariable",
"`%s'",symbol);
1180 UndefinedPrecedence,
1182 BitwiseComplementPrecedence,
1184 ExponentialNotationPrecedence,
1188 RelationalPrecedence,
1189 EquivalencyPrecedence,
1190 BitwiseAndPrecedence,
1191 BitwiseOrPrecedence,
1192 LogicalAndPrecedence,
1193 LogicalOrPrecedence,
1195 AssignmentPrecedence,
1215 subexpression=(
const char *) NULL;
1216 target=NullPrecedence;
1217 while ((c !=
'\0') && (*expression !=
'\0'))
1219 precedence=UndefinedPrecedence;
1220 if ((isspace((
int) ((
unsigned char) *expression)) != 0) || (c == (int)
'@'))
1225 switch (*expression)
1230 #if defined(MAGICKCORE_HAVE_ACOSH) 1237 #if defined(MAGICKCORE_HAVE_ASINH) 1244 #if defined(MAGICKCORE_HAVE_ATANH) 1261 if ((isdigit((
int) ((
unsigned char) c)) != 0) &&
1282 while (isxdigit((
int) ((
unsigned char) *(expression+1))) != 0)
1289 if ((c == (
int)
'{') || (c == (
int)
'['))
1292 if ((c == (
int)
'}') || (c == (
int)
']'))
1295 switch ((
unsigned char) *expression)
1300 precedence=BitwiseComplementPrecedence;
1306 precedence=ExponentPrecedence;
1311 if (((c != 0) && ((isdigit((
int) ((
unsigned char) c)) != 0) ||
1312 (strchr(
")",c) != (
char *) NULL))) &&
1313 (((islower((
int) ((
unsigned char) *expression)) != 0) ||
1314 (strchr(
"(",(
int) ((
unsigned char) *expression)) != (
char *) NULL)) ||
1315 ((isdigit((
int) ((
unsigned char) c)) == 0) &&
1316 (isdigit((
int) ((
unsigned char) *expression)) != 0))) &&
1317 (strchr(
"xy",(
int) ((
unsigned char) *expression)) == (
char *) NULL))
1318 precedence=MultiplyPrecedence;
1325 precedence=MultiplyPrecedence;
1331 if ((strchr(
"(+-/*%:&^|<>~,",c) == (
char *) NULL) ||
1332 (isalpha((
int) ((
unsigned char) c)) != 0))
1333 precedence=AdditionPrecedence;
1349 precedence=AssignmentPrecedence;
1355 precedence=ShiftPrecedence;
1363 precedence=RelationalPrecedence;
1369 precedence=EquivalencyPrecedence;
1374 precedence=BitwiseAndPrecedence;
1379 precedence=BitwiseOrPrecedence;
1384 precedence=LogicalAndPrecedence;
1389 precedence=LogicalOrPrecedence;
1394 precedence=ExponentialNotationPrecedence;
1400 precedence=TernaryPrecedence;
1405 precedence=AssignmentPrecedence;
1410 precedence=CommaPrecedence;
1415 precedence=SeparatorPrecedence;
1419 if ((precedence == BitwiseComplementPrecedence) ||
1420 (precedence == TernaryPrecedence) ||
1421 (precedence == AssignmentPrecedence))
1423 if (precedence > target)
1429 subexpression=expression;
1433 if (precedence >= target)
1439 subexpression=expression;
1441 if (strchr(
"(",(
int) *expression) != (
char *) NULL)
1443 c=(int) (*expression++);
1445 return(subexpression);
1449 const PixelChannel channel,
const ssize_t x,
const ssize_t y,
1450 const char *expression,
const size_t depth,
double *beta,
1453 #define FxMaxParenthesisDepth 58 1454 #define FxMaxSubexpressionDepth 200 1455 #define FxReturn(value) \ 1457 subexpression=DestroyString(subexpression); \ 1460 #define FxParseConditional(subexpression,sentinal,p,q) \ 1463 for (q=(char *) p; (*q != (sentinal)) && (*q != '\0'); q++) \ 1466 for (q++; (*q != ')') && (*q != '\0'); q++); \ 1472 (void) ThrowMagickException(exception,GetMagickModule(), \ 1473 OptionError,"UnableToParseExpression","`%s'",subexpression); \ 1476 if (strlen(q) == 1) \ 1497 *subexpression=
'\0';
1501 "UnableToParseExpression",
"`%s'",expression);
1506 while (isspace((
int) ((
unsigned char) *expression)) != 0)
1508 if (*expression ==
'\0')
1511 if (p != (
const char *) NULL)
1517 switch ((
unsigned char) *p)
1523 *beta=(double) (~(
size_t) *beta);
1530 FxReturn(*beta == 0.0 ? 1.0 : 0.0);
1535 depth+1,beta,exception));
1572 while (isalpha((
int) ((
unsigned char) *q)) != 0)
1577 OptionError,
"UnableToParseExpression",
"`%s'",subexpression);
1583 value=(double) ((
size_t) (alpha+0.5) & (size_t) (*beta+0.5));
1591 while (isalpha((
int) ((
unsigned char) *q)) != 0)
1596 OptionError,
"UnableToParseExpression",
"`%s'",subexpression);
1602 value=(double) ((
size_t) (alpha+0.5) | (size_t) (*beta+0.5));
1610 while (isalpha((
int) ((
unsigned char) *q)) != 0)
1615 OptionError,
"UnableToParseExpression",
"`%s'",subexpression);
1621 if ((
size_t) (*beta+0.5) >= (8*
sizeof(
size_t)))
1624 OptionError,
"ShiftCountOverflow",
"`%s'",subexpression);
1627 value=(double) ((
size_t) (alpha+0.5) << (size_t) (*beta+0.5));
1635 while (isalpha((
int) ((
unsigned char) *q)) != 0)
1640 OptionError,
"UnableToParseExpression",
"`%s'",subexpression);
1646 if ((
size_t) (*beta+0.5) >= (8*
sizeof(
size_t)))
1649 OptionError,
"ShiftCountOverflow",
"`%s'",subexpression);
1652 value=(double) ((
size_t) (alpha+0.5) >> (size_t) (*beta+0.5));
1660 while (isalpha((
int) ((
unsigned char) *q)) != 0)
1665 OptionError,
"UnableToParseExpression",
"`%s'",subexpression);
1671 value=pow(alpha,*beta);
1679 while (isalpha((
int) ((
unsigned char) *q)) != 0)
1684 OptionError,
"UnableToParseExpression",
"`%s'",subexpression);
1690 value=fmod(alpha,*beta);
1698 while (isalpha((
int) ((
unsigned char) *q)) != 0)
1703 OptionError,
"UnableToParseExpression",
"`%s'",subexpression);
1709 value=alpha+(*beta);
1717 while (isalpha((
int) ((
unsigned char) *q)) != 0)
1722 OptionError,
"UnableToParseExpression",
"`%s'",subexpression);
1728 value=alpha-(*beta);
1736 while (isalpha((
int) ((
unsigned char) *q)) != 0)
1741 OptionError,
"UnableToParseExpression",
"`%s'",subexpression);
1747 value=alpha*(*beta);
1755 while (isalpha((
int) ((
unsigned char) *q)) != 0)
1760 OptionError,
"UnableToParseExpression",
"`%s'",subexpression);
1773 if (*subexpression ==
'\0')
1777 if (*subexpression ==
'\0')
1789 if (*subexpression ==
'\0')
1793 if (*subexpression ==
'\0')
1807 if ((
size_t) (gamma+0.5) >= (8*
sizeof(
size_t)))
1810 OptionError,
"ShiftCountOverflow",
"`%s'",subexpression);
1813 *beta=(double) ((
size_t) (alpha+0.5) << (size_t) (gamma+0.5));
1820 if ((
size_t) (gamma+0.5) >= (8*
sizeof(
size_t)))
1823 OptionError,
"ShiftCountOverflow",
"`%s'",subexpression);
1826 *beta=(double) ((
size_t) (alpha+0.5) >> (size_t) (gamma+0.5));
1833 FxReturn(alpha < *beta ? 1.0 : 0.0);
1839 FxReturn(alpha <= *beta ? 1.0 : 0.0);
1845 FxReturn(alpha > *beta ? 1.0 : 0.0);
1851 FxReturn(alpha >= *beta ? 1.0 : 0.0);
1869 *beta=(double) ((
size_t) (alpha+0.5) & (size_t) (gamma+0.5));
1876 *beta=(double) ((
size_t) (alpha+0.5) | (size_t) (gamma+0.5));
1889 *beta=(gamma > 0.0) ? 1.0 : 0.0;
1902 *beta=(gamma > 0.0) ? 1.0 : 0.0;
1920 while (isalpha((
int) ((
unsigned char) *q)) != 0)
1925 OptionError,
"UnableToParseExpression",
"`%s'",subexpression);
1956 if (strchr(
"(",(
int) *expression) != (
char *) NULL)
1963 "ParenthesisNestedTooDeeply",
"`%s'",expression);
1966 subexpression[length-1]=
'\0';
1971 switch (*expression)
1989 FxReturn((
double) (~(
size_t) (gamma+0.5)));
1997 depth+1,beta,exception);
2000 #if defined(MAGICKCORE_HAVE_ACOSH) 2004 depth+1,beta,exception);
2011 depth+1,beta,exception);
2014 #if defined(MAGICKCORE_HAVE_J1) 2018 depth+1,beta,exception);
2025 #if defined(MAGICKCORE_HAVE_ASINH) 2029 depth+1,beta,exception);
2036 depth+1,beta,exception);
2042 depth+1,beta,exception);
2043 FxReturn(((ssize_t) alpha) & 0x01 ? -1.0 : 1.0);
2048 depth+1,beta,exception);
2051 #if defined(MAGICKCORE_HAVE_ATANH) 2055 depth+1,beta,exception);
2062 depth+1,beta,exception);
2082 depth+1,beta,exception);
2088 depth+1,beta,exception);
2098 depth+1,beta,exception);
2104 depth+1,beta,exception);
2123 depth+1,beta,exception);
2135 default: type=
"unknown";
break;
2145 default: type=
"unknown";
break;
2157 default: type=
"unknown";
break;
2162 *subexpression=
'\0';
2164 if (strlen(expression) > 6)
2168 subexpression[length-1]=
'\0';
2169 if (fx_info->
file != (FILE *) NULL)
2171 "%s=%.*g\n",fx_info->
images->
filename,(
double) x,(double) y,type,
2186 subexpression[length-1]=
'\0';
2202 depth+1,beta,exception);
2203 FxReturn((alpha/(*beta*(alpha-1.0)+1.0)));
2212 #if defined(MAGICKCORE_HAVE_ERF) 2216 depth+1,beta,exception);
2223 depth+1,beta,exception);
2236 depth+1,beta,exception);
2253 subexpression[length-1]=
'\0';
2278 depth+1,beta,exception);
2287 depth+1,beta,exception);
2288 gcd=
FxGCD(alpha,*beta);
2305 depth+1,beta,exception);
2334 subexpression[length-1]=
'\0';
2353 depth+1,beta,exception);
2359 depth+1,beta,exception);
2371 #if defined(MAGICKCORE_HAVE_J0) 2375 depth+1,beta,exception);
2379 #if defined(MAGICKCORE_HAVE_J1) 2383 depth+1,beta,exception);
2387 #if defined(MAGICKCORE_HAVE_J1) 2391 depth+1,beta,exception);
2405 depth+1,beta,exception);
2411 depth+1,beta,exception);
2417 depth+1,beta,exception);
2434 depth+1,beta,exception);
2435 FxReturn(alpha > *beta ? alpha : *beta);
2442 depth+1,beta,exception);
2443 FxReturn(alpha < *beta ? alpha : *beta);
2448 depth+1,beta,exception);
2461 depth+1,beta,exception);
2487 depth+1,beta,exception);
2508 #if defined(MAGICKCORE_OPENMP_SUPPORT) 2509 #pragma omp critical (MagickCore_FxEvaluateSubexpression) 2520 depth+1,beta,exception);
2521 if ((alpha-floor(alpha)) < (ceil(alpha)-alpha))
2537 depth+1,beta,exception);
2538 FxReturn(alpha < 0.0 ? -1.0 : 1.0);
2543 depth+1,beta,exception);
2551 depth+1,beta,exception);
2557 depth+1,beta,exception);
2563 depth+1,beta,exception);
2569 depth+1,beta,exception);
2582 depth+1,beta,exception);
2588 depth+1,beta,exception);
2596 depth+1,beta,exception);
2633 subexpression[length-1]=
'\0';
2668 q=(
char *) expression;
2670 if (q == expression)
2671 alpha=
FxGetSymbol(fx_info,channel,x,y,expression,depth+1,exception);
2696 fx_info->
file=(FILE *) NULL;
2704 const PixelChannel channel,
const ssize_t x,
const ssize_t y,
2749 assert(fx_info != (
FxInfo **) NULL);
2751 if (fx_info[i] != (
FxInfo *) NULL)
2777 if (fx_info == (
FxInfo **) NULL)
2781 return((
FxInfo **) NULL);
2783 (void) memset(fx_info,0,number_threads*
sizeof(*fx_info));
2784 if (*expression !=
'@')
2787 fx_expression=
FileToString(expression+1,~0UL,exception);
2788 for (i=0; i < (ssize_t) number_threads; i++)
2794 if (fx_info[i] == (
FxInfo *) NULL)
2801 if (i < (ssize_t) number_threads)
2809 #define FxImageTag "Fx/Image" 2830 assert(image != (
Image *) NULL);
2834 if (expression == (
const char *) NULL)
2837 if (fx_info == (
FxInfo **) NULL)
2838 return((
Image *) NULL);
2840 if (fx_image == (
Image *) NULL)
2843 return((
Image *) NULL);
2849 return((
Image *) NULL);
2858 #if defined(MAGICKCORE_OPENMP_SUPPORT) 2859 #pragma omp parallel for schedule(dynamic) shared(progress,status) \ 2860 magick_number_threads(image,fx_image,fx_image->rows, \ 2861 GlobExpression(fx_info[0]->expression,"debug(",MagickTrue) == 0 ? 1 : 0) 2863 for (y=0; y < (ssize_t) fx_image->
rows; y++)
2886 for (x=0; x < (ssize_t) fx_image->
columns; x++)
2922 #if defined(MAGICKCORE_OPENMP_SUPPORT)
MagickExport double InterpretSiPrefixValue(const char *magick_restrict string, char **magick_restrict sentinal)
MagickExport CacheView * DestroyCacheView(CacheView *cache_view)
MagickExport void ConvertRGBToHSL(const double red, const double green, const double blue, double *hue, double *saturation, double *lightness)
static double FxEvaluateSubexpression(FxInfo *, const PixelChannel, const ssize_t, const ssize_t, const char *, const size_t, double *, ExceptionInfo *)
MagickExport MagickBooleanType AddValueToSplayTree(SplayTreeInfo *splay_tree, const void *key, const void *value)
MagickProgressMonitor progress_monitor
MagickPrivate FxInfo * DestroyFxInfo(FxInfo *fx_info)
MagickExport ssize_t ParseCommandOption(const CommandOption option, const MagickBooleanType list, const char *options)
MagickExport Image * GetImageFromList(const Image *images, const ssize_t index)
#define ThrowFatalException(severity, tag)
PixelInterpolateMethod interpolate
static const double * GetFxSymbolValue(FxInfo *magick_restrict fx_info, const char *symbol)
static FxInfo ** DestroyFxThreadSet(FxInfo **fx_info)
MagickExport const char * GetImageArtifact(const Image *image, const char *artifact)
static double StringToDouble(const char *magick_restrict string, char **magick_restrict sentinal)
static PixelTrait GetPixelChannelTraits(const Image *magick_restrict image, const PixelChannel channel)
MagickExport ExceptionInfo * AcquireExceptionInfo(void)
MagickExport MagickBooleanType InterpolatePixelInfo(const Image *image, const CacheView_ *image_view, const PixelInterpolateMethod method, const double x, const double y, PixelInfo *pixel, ExceptionInfo *exception)
MagickExport ssize_t FormatLocaleString(char *magick_restrict string, const size_t length, const char *magick_restrict format,...)
static void SetPixelViaPixelInfo(const Image *magick_restrict image, const PixelInfo *magick_restrict pixel_info, Quantum *magick_restrict pixel)
MagickExport size_t CopyMagickString(char *magick_restrict destination, const char *magick_restrict source, const size_t length)
MagickExport const Quantum * GetCacheViewVirtualPixels(const CacheView *cache_view, const ssize_t x, const ssize_t y, const size_t columns, const size_t rows, ExceptionInfo *exception)
MagickExport void StripString(char *message)
MagickExport char * FileToString(const char *filename, const size_t extent, ExceptionInfo *exception)
static Quantum ClampToQuantum(const MagickRealType quantum)
MagickExport void GetPixelInfo(const Image *image, PixelInfo *pixel)
MagickExport RandomInfo * DestroyRandomInfo(RandomInfo *random_info)
MagickPrivate MagickBooleanType FxEvaluateChannelExpression(FxInfo *fx_info, const PixelChannel channel, const ssize_t x, const ssize_t y, double *alpha, ExceptionInfo *exception)
#define MagickCoreSignature
MagickExport Image * GetFirstImageInList(const Image *images)
MagickExport ssize_t FormatLocaleFile(FILE *file, const char *magick_restrict format,...)
ExceptionInfo * exception
unsigned int MagickStatusType
MagickExport char * AcquireString(const char *source)
static double PerceptibleReciprocal(const double x)
MagickExport void * AcquireCriticalMemory(const size_t size)
MagickExport void * AcquireQuantumMemory(const size_t count, const size_t quantum)
MagickExport int LocaleNCompare(const char *p, const char *q, const size_t length)
static int GetOpenMPThreadId(void)
static const char * FxOperatorPrecedence(const char *expression, ExceptionInfo *exception)
static double FxGetSymbol(FxInfo *fx_info, const PixelChannel channel, const ssize_t x, const ssize_t y, const char *expression, const size_t depth, ExceptionInfo *exception)
MagickExport SplayTreeInfo * DestroySplayTree(SplayTreeInfo *splay_tree)
static FxInfo ** AcquireFxThreadSet(const Image *image, const char *expression, ExceptionInfo *exception)
MagickExport int GetMagickPrecision(void)
MagickExport ChannelType SetPixelChannelMask(Image *image, const ChannelType channel_mask)
MagickExport SplayTreeInfo * NewSplayTree(int(*compare)(const void *, const void *), void *(*relinquish_key)(void *), void *(*relinquish_value)(void *))
MagickExport MagickBooleanType FxPreprocessExpression(FxInfo *fx_info, double *alpha, ExceptionInfo *exception)
MagickExport Quantum * QueueCacheViewAuthenticPixels(CacheView *cache_view, const ssize_t x, const ssize_t y, const size_t columns, const size_t rows, ExceptionInfo *exception)
#define FxMaxSubexpressionDepth
MagickExport MagickBooleanType ThrowMagickException(ExceptionInfo *exception, const char *module, const char *function, const size_t line, const ExceptionType severity, const char *tag, const char *format,...)
MagickExport MagickBooleanType LogMagickEvent(const LogEventType type, const char *module, const char *function, const size_t line, const char *format,...)
MagickExport RandomInfo * AcquireRandomInfo(void)
MagickExport MagickSizeType GetMagickResourceLimit(const ResourceType type)
MagickExport MagickBooleanType SubstituteString(char **string, const char *search, const char *replace)
MagickBooleanType(* MagickProgressMonitor)(const char *, const MagickOffsetType, const MagickSizeType, void *)
MagickExport MagickBooleanType GetImageRange(const Image *image, double *minima, double *maxima, ExceptionInfo *exception)
MagickExport MagickBooleanType QueryColorCompliance(const char *name, const ComplianceType compliance, PixelInfo *color, ExceptionInfo *exception)
MagickExport MagickBooleanType SetImageStorageClass(Image *image, const ClassType storage_class, ExceptionInfo *exception)
MagickPrivate MagickBooleanType FxEvaluateExpression(FxInfo *fx_info, double *alpha, ExceptionInfo *exception)
MagickExport MagickBooleanType GetImageKurtosis(const Image *image, double *kurtosis, double *skewness, ExceptionInfo *exception)
MagickExport const void * GetValueFromSplayTree(SplayTreeInfo *splay_tree, const void *key)
static double FxGCD(const double alpha, const double beta)
MagickExport MagickBooleanType GetImageMean(const Image *image, double *mean, double *standard_deviation, ExceptionInfo *exception)
MagickExport PixelInfo * ClonePixelInfo(const PixelInfo *pixel)
static size_t GetPixelChannels(const Image *magick_restrict image)
static double FxChannelStatistics(FxInfo *fx_info, Image *image, PixelChannel channel, const char *symbol, ExceptionInfo *exception)
MagickExport int LocaleCompare(const char *p, const char *q)
char filename[MagickPathExtent]
#define GetMagickModule()
MagickExport int CompareSplayTreeString(const void *target, const void *source)
static PixelChannel GetPixelChannelChannel(const Image *magick_restrict image, const ssize_t offset)
MagickExport CacheView * AcquireVirtualCacheView(const Image *image, ExceptionInfo *exception)
MagickExport void ClearMagickException(ExceptionInfo *exception)
MagickExport MagickSizeType GetBlobSize(const Image *image)
#define FxMaxParenthesisDepth
MagickExport size_t GetImageDepth(const Image *image, ExceptionInfo *exception)
MagickExport ssize_t GetImageIndexInList(const Image *images)
MagickExport char * DestroyString(char *string)
MagickExport void * AcquireMagickMemory(const size_t size)
#define FxParseConditional(subexpression, sentinal, p, q)
MagickExport double GetPseudoRandomValue(RandomInfo *magick_restrict random_info)
MagickExport MagickStatusType ParseGeometry(const char *geometry, GeometryInfo *geometry_info)
static void SetPixelChannel(const Image *magick_restrict image, const PixelChannel channel, const Quantum quantum, Quantum *magick_restrict pixel)
static const char * FxSubexpression(const char *expression, ExceptionInfo *exception)
MagickExport void * RelinquishMagickMemory(void *memory)
MagickPrivate FxInfo * AcquireFxInfo(const Image *images, const char *expression, ExceptionInfo *exception)
MagickExport MagickBooleanType SyncCacheViewAuthenticPixels(CacheView *magick_restrict cache_view, ExceptionInfo *exception)
MagickExport CacheView * AcquireAuthenticCacheView(const Image *image, ExceptionInfo *exception)
MagickExport MagickBooleanType GetImageMedian(const Image *image, double *median, ExceptionInfo *exception)
static MagickBooleanType SetFxSymbolValue(FxInfo *magick_restrict fx_info, const char *magick_restrict symbol, double const value)
MagickExport MagickRealType GetPixelIntensity(const Image *magick_restrict image, const Quantum *magick_restrict pixel)
MagickExport size_t GetImageListLength(const Image *images)
MagickExport Image * DestroyImage(Image *image)
MagickExport char * ConstantString(const char *source)
MagickExport Image * CloneImage(const Image *image, const size_t columns, const size_t rows, const MagickBooleanType detach, ExceptionInfo *exception)
static MagickBooleanType IsFxFunction(const char *expression, const char *name, const size_t length)
ColorspaceType colorspace
MagickExport Image * FxImage(const Image *image, const char *expression, ExceptionInfo *exception)
MagickExport MagickBooleanType SetImageProgress(const Image *image, const char *tag, const MagickOffsetType offset, const MagickSizeType extent)
MagickExport ExceptionInfo * DestroyExceptionInfo(ExceptionInfo *exception)