diff --git a/MagickCore/option.c b/MagickCore/option.c
index 01e2a2e..2551792 100644
--- a/MagickCore/option.c
+++ b/MagickCore/option.c
@@ -332,6 +332,8 @@
{ "-contrast-stretch", 1L, SimpleOperatorFlag, MagickFalse },
{ "+convolve", 1L, DeprecateOptionFlag, MagickTrue },
{ "-convolve", 1L, SimpleOperatorFlag, MagickFalse },
+ { "+copy", 2L, DeprecateOptionFlag | FireOptionFlag, MagickTrue },
+ { "-copy", 2L, ListOperatorFlag | FireOptionFlag, MagickFalse },
{ "+crop", 1L, DeprecateOptionFlag | FireOptionFlag, MagickTrue },
{ "-crop", 1L, SimpleOperatorFlag | FireOptionFlag, MagickFalse },
{ "+cycle", 1L, DeprecateOptionFlag, MagickTrue },
diff --git a/MagickWand/convert.c b/MagickWand/convert.c
index 45f54ff..690b33d 100644
--- a/MagickWand/convert.c
+++ b/MagickWand/convert.c
@@ -687,10 +687,11 @@
i++;
if (i == (ssize_t) argc)
ThrowConvertException(OptionError,"MissingArgument",option);
- type=ParseCommandOption(MagickAlphaChannelOptions,MagickFalse,argv[i]);
+ type=ParseCommandOption(MagickAlphaChannelOptions,MagickFalse,
+ argv[i]);
if (type < 0)
- ThrowConvertException(OptionError,"UnrecognizedAlphaChannelOption",
- argv[i]);
+ ThrowConvertException(OptionError,
+ "UnrecognizedAlphaChannelOption",argv[i]);
break;
}
if (LocaleCompare("annotate",option+1) == 0)
@@ -1166,6 +1167,23 @@
kernel_info=DestroyKernelInfo(kernel_info);
break;
}
+ if (LocaleCompare("copy",option+1) == 0)
+ {
+ if (*option == '+')
+ break;
+ i++;
+ if (i == (ssize_t) argc)
+ ThrowConvertException(OptionError,"MissingArgument",option);
+ if (IsGeometry(argv[i]) == MagickFalse)
+ ThrowConvertInvalidArgumentException(option,argv[i]);
+ i++;
+ if (i == (ssize_t) argc)
+ ThrowConvertException(OptionError,"MissingArgument",option);
+ if (IsGeometry(argv[i]) == MagickFalse)
+ ThrowConvertInvalidArgumentException(option,argv[i]);
+ i++;
+ break;
+ }
if (LocaleCompare("crop",option+1) == 0)
{
if (*option == '+')
diff --git a/MagickWand/mogrify.c b/MagickWand/mogrify.c
index d2918ba..977527a 100644
--- a/MagickWand/mogrify.c
+++ b/MagickWand/mogrify.c
@@ -1265,6 +1265,29 @@
kernel_info=DestroyKernelInfo(kernel_info);
break;
}
+ if (LocaleCompare("copy",option+1) == 0)
+ {
+ Image
+ *source_image;
+
+ OffsetInfo
+ offset;
+
+ /*
+ Copy image pixels.
+ */
+ (void) SyncImageSettings(mogrify_info,*image,exception);
+ flags=ParsePageGeometry(*image,argv[i+2],&geometry,exception);
+ offset.x=geometry.x;
+ offset.y=geometry.y;
+ flags=ParsePageGeometry(*image,argv[i+1],&geometry,exception);
+ source_image=(*image);
+ if ((*image)->next != (Image *) NULL)
+ source_image=(*image)->next;
+ status=CopyImagePixels(*image,source_image,&geometry,&offset,
+ exception);
+ break;
+ }
if (LocaleCompare("crop",option+1) == 0)
{
/*
@@ -3539,6 +3562,8 @@
"-compare mathematically and visually annotate the difference between an image and its reconstruction",
"-complex operator perform complex mathematics on an image sequence",
"-composite composite image",
+ "-copy geometry offset",
+ " copy pixels from one area of an image to another",
"-crop geometry cut out a rectangular region of the image",
"-deconstruct break down an image sequence into constituent parts",
"-evaluate-sequence operator",
@@ -4354,6 +4379,23 @@
kernel_info=DestroyKernelInfo(kernel_info);
break;
}
+ if (LocaleCompare("copy",option+1) == 0)
+ {
+ if (*option == '+')
+ break;
+ i++;
+ if (i == (ssize_t) argc)
+ ThrowMogrifyException(OptionError,"MissingArgument",option);
+ if (IsGeometry(argv[i]) == MagickFalse)
+ ThrowMogrifyInvalidArgumentException(option,argv[i]);
+ i++;
+ if (i == (ssize_t) argc)
+ ThrowMogrifyException(OptionError,"MissingArgument",option);
+ if (IsGeometry(argv[i]) == MagickFalse)
+ ThrowMogrifyInvalidArgumentException(option,argv[i]);
+ i++;
+ break;
+ }
if (LocaleCompare("crop",option+1) == 0)
{
if (*option == '+')
diff --git a/MagickWand/operation.c b/MagickWand/operation.c
index f23f118..a3bc47e 100644
--- a/MagickWand/operation.c
+++ b/MagickWand/operation.c
@@ -2165,6 +2165,32 @@
kernel_info=DestroyKernelInfo(kernel_info);
break;
}
+ if (LocaleCompare("copy",option+1) == 0)
+ {
+ Image
+ *source_image;
+
+ OffsetInfo
+ offset;
+
+ /*
+ Copy image pixels.
+ */
+ if (IfMagickFalse(IsGeometry(arg1)))
+ CLIWandExceptArgBreak(OptionError,"InvalidArgument",option,arg1);
+ if (IfMagickFalse(IsGeometry(arg2)))
+ CLIWandExceptArgBreak(OptionError,"InvalidArgument",option,arg1);
+ flags=ParsePageGeometry(_image,arg2,&geometry,exception);
+ offset.x=geometry.x;
+ offset.y=geometry.y;
+ flags=ParsePageGeometry(_image,arg1,&geometry,exception);
+ source_image=_image;
+ if (_image->next != (Image *) NULL)
+ source_image=_image->next;
+ (void) CopyImagePixels(_image,source_image,&geometry,&offset,
+ exception);
+ break;
+ }
if (LocaleCompare("crop",option+1) == 0)
{
/* WARNING: This can generate multiple images! */