diff --git a/wand/compare.c b/wand/compare.c
index caabeb4..af85445 100644
--- a/wand/compare.c
+++ b/wand/compare.c
@@ -139,6 +139,7 @@
"-size geometry width and height of image",
"-transparent-color color",
" transparent color",
+ "-subimage-search search for subimage",
"-type type image type",
"-verbose print detailed information about the image",
"-version print version information",
@@ -225,13 +226,10 @@
ImageStack
image_stack[MaxImageStackDepth+1];
- ssize_t
- j,
- k;
-
MagickBooleanType
fire,
- pend;
+ pend,
+ subimage_search;
MagickStatusType
status;
@@ -245,6 +243,10 @@
register ssize_t
i;
+ ssize_t
+ j,
+ k;
+
/*
Set defaults.
*/
@@ -282,6 +284,7 @@
pend=MagickFalse;
reconstruct_image=NewImageList();
status=MagickTrue;
+ subimage_search=MagickFalse;
/*
Compare an image.
*/
@@ -836,6 +839,16 @@
ThrowCompareInvalidArgumentException(option,argv[i]);
break;
}
+ if (LocaleCompare("subimage-search",option+1) == 0)
+ {
+ if (*option == '+')
+ {
+ subimage_search=MagickFalse;
+ break;
+ }
+ subimage_search=MagickTrue;
+ break;
+ }
ThrowCompareException(OptionError,"UnrecognizedOption",option)
}
case 't':
@@ -929,39 +942,43 @@
difference_image=CompareImageChannels(image,reconstruct_image,channels,
metric,&distortion,exception);
else
- if (similarity_image != (Image *) NULL)
- {
- Image
- *composite_image;
+ if (subimage_search == MagickFalse)
+ difference_image=CompareImageChannels(image,reconstruct_image,channels,
+ metric,&distortion,exception);
+ else
+ if (similarity_image != (Image *) NULL)
+ {
+ Image
+ *composite_image;
- /*
- Determine if reconstructed image is a subimage of the image.
- */
- composite_image=CloneImage(image,0,0,MagickTrue,exception);
- if (composite_image == (Image *) NULL)
- difference_image=CompareImageChannels(image,reconstruct_image,
- channels,metric,&distortion,exception);
- else
- {
- (void) CompositeImage(composite_image,CopyCompositeOp,
- reconstruct_image,offset.x,offset.y);
- difference_image=CompareImageChannels(image,composite_image,
+ /*
+ Determine if reconstructed image is a subimage of the image.
+ */
+ composite_image=CloneImage(image,0,0,MagickTrue,exception);
+ if (composite_image == (Image *) NULL)
+ difference_image=CompareImageChannels(image,reconstruct_image,
channels,metric,&distortion,exception);
- if (difference_image != (Image *) NULL)
- {
- difference_image->page.x=offset.x;
- difference_image->page.y=offset.y;
- }
- composite_image=DestroyImage(composite_image);
- }
- if (difference_image == (Image *) NULL)
- similarity_image=DestroyImage(similarity_image);
- else
- {
- AppendImageToList(&difference_image,similarity_image);
- similarity_image=(Image *) NULL;
- }
- }
+ else
+ {
+ (void) CompositeImage(composite_image,CopyCompositeOp,
+ reconstruct_image,offset.x,offset.y);
+ difference_image=CompareImageChannels(image,composite_image,
+ channels,metric,&distortion,exception);
+ if (difference_image != (Image *) NULL)
+ {
+ difference_image->page.x=offset.x;
+ difference_image->page.y=offset.y;
+ }
+ composite_image=DestroyImage(composite_image);
+ }
+ if (difference_image == (Image *) NULL)
+ similarity_image=DestroyImage(similarity_image);
+ else
+ {
+ AppendImageToList(&difference_image,similarity_image);
+ similarity_image=(Image *) NULL;
+ }
+ }
if (difference_image == (Image *) NULL)
status=0;
else