diff --git a/MagickWand/operation.c b/MagickWand/operation.c
index 7c45972..0439387 100644
--- a/MagickWand/operation.c
+++ b/MagickWand/operation.c
@@ -462,14 +462,8 @@
IfSetOption ? MagickTrue : MagickFalse;
break;
}
- if (LocaleCompare("attenuate",option) == 0)
- {
- (void) SetImageOption(image_info,option,
- IfSetOption ? argv[1] : DeleteOption);
- break;
- }
if (LocaleCompare("authenticate",option) == 0)
- {
+ {
(void) SetImageOption(image_info,option,
IfSetOption ? argv[1] : DeleteOption);
break;
@@ -594,28 +588,33 @@
if (LocaleCompare("compose",option) == 0)
{
/* FUTURE: What should be used? image_info or ImageOption ???
- The former is more efficent, the later cristy prefers!
+ The former is more efficent, but Crisy prefers the latter!
*/
- const char
- *value;
-
- value = IfSetOption ? argv[1] : "undefined";
- (void) SetImageOption(image_info,option,value);
+ (void) SetImageOption(image_info,option,
+ IfSetOption ? argv[1] : DeleteOption);
image_info->compose=(CompositeOperator) ParseCommandOption(
- MagickComposeOptions,MagickFalse,value);
+ MagickComposeOptions,MagickFalse,
+ IfSetOption ? argv[1] : "undefined");
break;
}
if (LocaleCompare("compress",option) == 0)
{
- if (*argv[0] == '+')
+ /* FUTURE: What should be used? image_info or ImageOption ???
+ The former is more efficent, but Crisy prefers the latter!
+
+ The coders appears to use image_info, not Image_Option
+ however the image attribute (for save) is set from the
+ ImageOption!
+ */
+ if (IfSetOption)
{
- image_info->compression=UndefinedCompression;
- (void) SetImageOption(image_info,option,"undefined");
+ image_info->compression=(CompressionType) ParseCommandOption(
+ MagickCompressOptions,MagickFalse,argv[1]);
+ (void) SetImageOption(image_info,option,argv[1]);
break;
}
- image_info->compression=(CompressionType) ParseCommandOption(
- MagickCompressOptions,MagickFalse,argv[1]);
- (void) SetImageOption(image_info,option,argv[1]);
+ image_info->compression=UndefinedCompression;
+ (void) SetImageOption(image_info,option,"undefined");
break;
}
break;
@@ -624,110 +623,104 @@
{
if (LocaleCompare("debug",option) == 0)
{
- if (*argv[0] == '+')
- (void) SetLogEventMask("none");
- else
- (void) SetLogEventMask(argv[1]);
- image_info->debug=IsEventLogging();
+ if (IfSetOption)
+ (void) SetLogEventMask(IfSetOption?argv[1]:"none");
+ image_info->debug=IsEventLogging(); /* extract logging*/
+ wand->debug=IsEventLogging();
break;
}
if (LocaleCompare("define",option) == 0)
{
- if (*argv[0] == '+')
- {
- if (LocaleNCompare(argv[1],"registry:",9) == 0)
- (void) DeleteImageRegistry(argv[1]+9);
- else
- (void) DeleteImageOption(image_info,argv[1]);
- break;
- }
+ /* FUTURE both -set and -define sets ImageOption
+ But differs in that -set tried to set image properity (attribute)
+ */
if (LocaleNCompare(argv[1],"registry:",9) == 0)
{
- (void) DefineImageRegistry(StringRegistryType,argv[1]+9,
- exception);
+ if (IfSetOption)
+ (void) DefineImageRegistry(StringRegistryType,argv[1]+9,
+ exception);
+ else
+ (void) DefineImageOption(image_info,argv[1]);
break;
}
- (void) DefineImageOption(image_info,argv[1]);
+ if (IfSetOption)
+ (void) DefineImageOption(image_info,argv[1]);
+ else
+ (void) DeleteImageOption(image_info,argv[1]);
break;
}
if (LocaleCompare("delay",option) == 0)
{
- if (*argv[0] == '+')
- {
- (void) SetImageOption(image_info,option,"0");
- break;
- }
- (void) SetImageOption(image_info,option,argv[1]);
+ /* transfered to new images only via AcquireImage()
+ -set delay must be used to set attributes directly.
+ */
+ (void) SetImageOption(image_info,option,
+ IfSetOption ? argv[1] : "0");
break;
}
if (LocaleCompare("density",option) == 0)
{
- /*
- Set image density.
+ /* FUTURE: At this time everyone is using image_info string
+ The Image Option is not being used.
*/
- if (*argv[0] == '+')
+ if (IsSetOption)
{
- if (image_info->density != (char *) NULL)
- image_info->density=DestroyString(image_info->density);
- (void) SetImageOption(image_info,option,"72");
+ (void) CloneString(&image_info->density,argv[1]);
+ (void) CloneString(&draw_info->density,argv[1]);
+ (void) SetImageOption(image_info,option,argv[1]);
break;
}
- (void) CloneString(&image_info->density,argv[1]);
- (void) SetImageOption(image_info,option,argv[1]);
+ if (image_info->density != (char *) NULL)
+ image_info->density=DestroyString(image_info->density);
+ if (draw_info->density != (char *) NULL)
+ draw_info->density=DestroyString(draw_info->density);
+ (void) SetImageOption(image_info,option,"72");
break;
}
if (LocaleCompare("depth",option) == 0)
{
- if (*argv[0] == '+')
- {
- image_info->depth=MAGICKCORE_QUANTUM_DEPTH;
- break;
- }
- image_info->depth=StringToUnsignedLong(argv[1]);
+ /* This is also a SimpleImageOperator! */
+ image_info->depth=IsSetOption?StringToUnsignedLong(argv[1])
+ :MAGICKCORE_QUANTUM_DEPTH;
break;
}
if (LocaleCompare("direction",option) == 0)
{
- if (*argv[0] == '+')
- {
- (void) SetImageOption(image_info,option,"undefined");
- break;
- }
- (void) SetImageOption(image_info,option,argv[1]);
+ /* Image Option is only used to det draw_info */
+ (void) SetImageOption(image_info,option,
+ IfSetOption ? argv[1] : "undefined");
+ draw_info->direction=(DirectionType) ParseCommandOption(
+ MagickDirectionOptions,MagickFalse,
+ IfSetOption ? argv[1] : "undefined");
break;
}
if (LocaleCompare("display",option) == 0)
{
- if (*argv[0] == '+')
- {
- if (image_info->server_name != (char *) NULL)
- image_info->server_name=DestroyString(
- image_info->server_name);
- break;
- }
- (void) CloneString(&image_info->server_name,argv[1]);
+ if (IfSetOption)
+ (void) CloneString(&image_info->server_name,argv[1]);
+ else
+ if (image_info->server_name != (char *) NULL)
+ image_info->server_name=DestroyString(image_info->server_name);
break;
}
if (LocaleCompare("dispose",option) == 0)
{
- if (*argv[0] == '+')
- {
- (void) SetImageOption(image_info,option,"undefined");
- break;
- }
- (void) SetImageOption(image_info,option,argv[1]);
+ (void) SetImageOption(image_info,option,
+ IfSetOption ? argv[1] : "undefined");
break;
}
if (LocaleCompare("dither",option) == 0)
{
- if (*argv[0] == '+')
- {
- image_info->dither=MagickFalse;
- (void) SetImageOption(image_info,option,"none");
- break;
- }
- (void) SetImageOption(image_info,option,argv[1]);
- image_info->dither=MagickTrue;
+ /* FUTURE: Merge boolean image_info->dither with Dither type */
+ (void) SetImageOption(image_info,option,
+ IfSetOption ? argv[1] : "none");
+ image_info->dither = quantize_info->dither =
+ IfSetOption?MagickTrue:MagickFalse;
+ quantize_info->dither_method=(DitherMethod) ParseCommandOption(
+ MagickDitherOptions,MagickFalse,
+ IfSetOption ? argv[1] : "none");
+ if (quantize_info->dither_method == NoDitherMethod)
+ image_info->dither=quantize_info->dither=MagickFalse;
break;
}
break;
@@ -742,6 +735,7 @@
break;
}
(void) SetImageOption(image_info,option,argv[1]);
+ (void) CloneString(&draw_info->encoding,argv[1]);
break;
}
if (LocaleCompare("endian",option) == 0)
@@ -1553,12 +1547,12 @@
ChannelType
channel;
+ ComposeOperation
+ compose;
+
const char
*format;
- double
- attenuate;
-
DrawInfo
*draw_info;
@@ -1593,7 +1587,6 @@
SetGeometryInfo(&geometry_info);
GetPixelInfo(*image,&fill);
SetPixelInfoPacket(*image,&(*image)->background_color,&fill);
- attenuate=1.0;
channel=image_info->channel;
format=GetImageOption(image_info,"format");
@@ -1683,16 +1676,6 @@
(void) AnnotateImage(*image,draw_info,exception);
break;
}
- if (LocaleCompare("attenuate",option+1) == 0)
- {
- if (*option == '+')
- {
- attenuate=1.0;
- break;
- }
- attenuate=InterpretLocaleValue(argv[i+1],(char **) NULL);
- break;
- }
if (LocaleCompare("auto-gamma",argv[0]+1) == 0)
{
/*
@@ -1793,6 +1776,20 @@
}
if (LocaleCompare("border",argv[0]+1) == 0)
{
+ ComposeOperator
+ compose;
+
+ const char*
+ const char*
+ value;
+
+ value=GetImageOption(image_info,"compose");
+ if (value != (const char *) NULL)
+ compose=(CompositeOperator) ParseCommandOption(
+ MagickComposeOptions,MagickFalse,value);
+ else
+ compose=OverCompositeOp; /* use Over not image->compose */
+
(void) SyncImageSettings(image_info,*image);
flags=ParsePageGeometry(*image,argv[1],&geometry,exception);
if ((flags & SigmaValue) == 0)
@@ -2090,23 +2087,12 @@
}
break;
}
- if (LocaleCompare("density",argv[0]+1) == 0)
- {
- /*
- Set image density.
- */
- (void) CloneString(&draw_info->density,argv[1]);
- break;
- }
if (LocaleCompare("depth",argv[0]+1) == 0)
{
+ /* the image_info->depth setting has already bee set
+ * We just need to apply it to all images in current sequence */
(void) SyncImageSettings(image_info,*image);
- if (*argv[0] == '+')
- {
- (void) SetImageDepth(*image,MAGICKCORE_QUANTUM_DEPTH);
- break;
- }
- (void) SetImageDepth(*image,StringToUnsignedLong(argv[1]));
+ (void) SetImageDepth(*image,image_info->depth);
break;
}
if (LocaleCompare("deskew",argv[0]+1) == 0)
@@ -2214,25 +2200,8 @@
arguments=(double *) RelinquishMagickMemory(arguments);
break;
}
- if (LocaleCompare("dither",argv[0]+1) == 0)
- {
- if (*argv[0] == '+')
- {
- quantize_info->dither=MagickFalse;
- break;
- }
- quantize_info->dither=MagickTrue;
- quantize_info->dither_method=(DitherMethod) ParseCommandOption(
- MagickDitherOptions,MagickFalse,argv[1]);
- if (quantize_info->dither_method == NoDitherMethod)
- quantize_info->dither=MagickFalse;
- break;
- }
if (LocaleCompare("draw",argv[0]+1) == 0)
{
- /*
- Draw image.
- */
(void) SyncImageSettings(image_info,*image);
(void) CloneString(&draw_info->primitive,argv[1]);
(void) DrawImage(*image,draw_info,exception);
@@ -2244,9 +2213,6 @@
{
if (LocaleCompare("edge",argv[0]+1) == 0)
{
- /*
- Enhance edges in the image.
- */
(void) SyncImageSettings(image_info,*image);
flags=ParseGeometry(argv[1],&geometry_info);
if ((flags & SigmaValue) == 0)
@@ -2257,9 +2223,6 @@
}
if (LocaleCompare("emboss",argv[0]+1) == 0)
{
- /*
- Gaussian embossen image.
- */
(void) SyncImageSettings(image_info,*image);
flags=ParseGeometry(argv[1],&geometry_info);
if ((flags & SigmaValue) == 0)
@@ -2273,9 +2236,6 @@
StringInfo
*passkey;
- /*
- Encipher pixels.
- */
(void) SyncImageSettings(image_info,*image);
passkey=FileToStringInfo(argv[1],~0,exception);
if (passkey != (StringInfo *) NULL)
@@ -2285,11 +2245,6 @@
}
break;
}
- if (LocaleCompare("encoding",argv[0]+1) == 0)
- {
- (void) CloneString(&draw_info->encoding,argv[1]);
- break;
- }
if (LocaleCompare("enhance",argv[0]+1) == 0)
{
/*
@@ -2457,7 +2412,7 @@
frame_info.y=(ssize_t) frame_info.height;
frame_info.width=(*image)->columns+2*frame_info.width;
frame_info.height=(*image)->rows+2*frame_info.height;
- new_image=FrameImage(*image,&frame_info,compose,exception);
+ new_image=FrameImage(*image,&frame_info,COMPOSE,exception);
break;
}
if (LocaleCompare("function",argv[0]+1) == 0)
@@ -3003,7 +2958,7 @@
noise=(NoiseType) ParseCommandOption(MagickNoiseOptions,
MagickFalse,argv[1]);
- new_image=AddNoiseImage(*image,noise,attenuate,exception);
+ new_image=AddNoiseImage(*image,noise,exception);
}
break;
}
@@ -4160,6 +4115,29 @@
RectangleInfo
geometry;
+ ComposeOperator
+ compose;
+
+ const char*
+ value;
+
+ value=GetImageOption(image_info,"compose");
+ if (value != (const char *) NULL)
+ compose=(CompositeOperator) ParseCommandOption(
+ MagickComposeOptions,MagickFalse,value);
+ else
+ compose=OverCompositeOp; /* use Over not image->compose */
+
+ const char*
+ value=GetImageOption(image_info,"compose");
+
+ if (value != (const char *) NULL)
+ compose=(CompositeOperator) ParseCommandOption(
+ MagickComposeOptions,MagickFalse,value);
+ else
+ compose=OverCompositeOp; /* use Over not image->compose */
+
+
(void) SyncImagesSettings(image_info,*images);
image=RemoveFirstImageFromList(images);
composite_image=RemoveFirstImageFromList(images);
@@ -4177,8 +4155,8 @@
mask_image=RemoveFirstImageFromList(images);
if (mask_image != (Image *) NULL)
{
- if ((image->compose == DisplaceCompositeOp) ||
- (image->compose == DistortCompositeOp))
+ if ((compose == DisplaceCompositeOp) ||
+ (compose == DistortCompositeOp))
{
/*
Merge Y displacement into X displacement image.
@@ -4197,7 +4175,7 @@
(void) NegateImage(image->mask,MagickFalse,exception);
}
}
- (void) CompositeImage(image,image->compose,composite_image,
+ (void) CompositeImage(image,compose,composite_image,
geometry.x,geometry.y);
if (mask_image != (Image *) NULL)
mask_image=image->mask=DestroyImage(image->mask);
@@ -4549,15 +4527,25 @@
}
case CompositeLayer:
{
- CompositeOperator
- compose;
-
Image
*source;
RectangleInfo
geometry;
+ ComposeOperator
+ compose;
+
+ const char*
+ value;
+
+ value=GetImageOption(image_info,"compose");
+ if (value != (const char *) NULL)
+ compose=(CompositeOperator) ParseCommandOption(
+ MagickComposeOptions,MagickFalse,value);
+ else
+ compose=OverCompositeOp; /* use Over not image->compose */
+
/*
Split image sequence at the first 'NULL:' image.
*/
@@ -4603,11 +4591,10 @@
(*images)->page.width : (*images)->columns,
(*images)->page.height != 0 ? (*images)->page.height :
(*images)->rows,(*images)->gravity,&geometry);
- compose=OverCompositeOp;
- argv[0]=GetImageOption(image_info,"compose");
- if (argv[0] != (const char *) NULL)
- compose=(CompositeOperator) ParseCommandOption(
- MagickComposeOptions,MagickFalse,argv[0]);
+
+ /*
+ Compose the two image sequences together
+ */
CompositeLayers(*images,compose,source,geometry.x,geometry.y,
exception);
source=DestroyImageList(source);