]> granicus.if.org Git - imagemagick/commitdiff
(no commit message)
authorcristy <urban-warrior@git.imagemagick.org>
Sun, 29 Jan 2012 21:41:05 +0000 (21:41 +0000)
committercristy <urban-warrior@git.imagemagick.org>
Sun, 29 Jan 2012 21:41:05 +0000 (21:41 +0000)
37 files changed:
Magick++/lib/Image.cpp
Magick++/lib/Magick++/Include.h
MagickCore/attribute.c
MagickCore/cache-private.h
MagickCore/cache.c
MagickCore/compare.c
MagickCore/composite.c
MagickCore/constitute.c
MagickCore/decorate.c
MagickCore/draw.c
MagickCore/effect.c
MagickCore/enhance.c
MagickCore/fx.c
MagickCore/image.c
MagickCore/image.h
MagickCore/magick-config.h
MagickCore/paint.c
MagickCore/pixel-accessor.h
MagickCore/pixel.c
MagickCore/quantum-export.c
MagickCore/quantum-import.c
MagickCore/resize.c
MagickCore/shear.c
MagickCore/signature.c
MagickCore/statistic.c
MagickCore/threshold.c
MagickCore/transform.c
MagickCore/version.h
MagickWand/composite.c
MagickWand/drawing-wand.c
MagickWand/magick-image.c
MagickWand/mogrify.c
MagickWand/operation.c
PerlMagick/Magick.xs
coders/clip.c
coders/msl.c
coders/ps3.c

index 5dcc942a7cdec994ba376c072ed9df68354f56a0..ae0f1c4c30ddfe9f0a3a393c79f6b864e28a4b39 100644 (file)
@@ -2678,12 +2678,12 @@ void Magick::Image::clipMask ( const Magick::Image & clipMask_ )
   if( clipMask_.isValid() )
     {
       // Set clip mask
-      SetImageClipMask( image(), clipMask_.constImage(), &exceptionInfo );
+      SetImageMask( image(), clipMask_.constImage(), &exceptionInfo );
     }
   else
     {
       // Unset existing clip mask
-      SetImageClipMask( image(), 0, &exceptionInfo );
+      SetImageMask( image(), 0, &exceptionInfo );
     }
    throwException( exceptionInfo );
    (void) DestroyExceptionInfo( &exceptionInfo );
index 19d75f68576fefb71dc788c467f9b965a856a5b6..1d592ba0f7834fa2c654cdbc720c63e1d5749fbc 100644 (file)
@@ -873,14 +873,13 @@ namespace Magick
   using MagickCore::SeparateImage;
   using MagickCore::SetClientName;
   using MagickCore::SetGeometry;
+  using MagickCore::SetImageAlpha;
   using MagickCore::SetImageBackgroundColor;
   using MagickCore::SetImageDepth;
-  using MagickCore::SetImageClipMask;
-  using MagickCore::SetImageDepth;
   using MagickCore::SetImageExtent;
   using MagickCore::SetImageInfo;
   using MagickCore::SetImageInfoFile;
-  using MagickCore::SetImageAlpha;
+  using MagickCore::SetImageMask;
   using MagickCore::SetImageOption;
   using MagickCore::SetImageProfile;
   using MagickCore::SetImageProperty;
index b00697e2700632d0e8ff10fd3c43d49215629cf7..5bb0989e0c8305abca8cc90953e060e4d339d62c 100644 (file)
@@ -407,6 +407,11 @@ MagickExport size_t GetImageDepth(const Image *image,ExceptionInfo *exception)
           register ssize_t
             i;
 
+          if (GetPixelMask(image,p) != 0)
+            {
+              p+=GetPixelChannels(image);
+              continue;
+            }
           for (i=0; i < (ssize_t) GetPixelChannels(image); i++)
           {
             PixelChannel
@@ -418,7 +423,7 @@ MagickExport size_t GetImageDepth(const Image *image,ExceptionInfo *exception)
             channel=GetPixelChannelMapChannel(image,i);
             traits=GetPixelChannelMapTraits(image,channel);
             if ((traits == UndefinedPixelTrait) ||
-                (channel == IndexPixelChannel))
+                (channel == IndexPixelChannel) || (channel == MaskPixelChannel))
               continue;
             if (depth_map[ScaleQuantumToMap(p[i])] > current_depth[id])
               current_depth[id]=depth_map[ScaleQuantumToMap(p[i])];
@@ -465,6 +470,11 @@ MagickExport size_t GetImageDepth(const Image *image,ExceptionInfo *exception)
       register ssize_t
         i;
 
+      if (GetPixelMask(image,p) != 0)
+        {
+          p+=GetPixelChannels(image);
+          continue;
+        }
       for (i=0; i < (ssize_t) GetPixelChannels(image); i++)
       {
         PixelChannel
@@ -475,8 +485,8 @@ MagickExport size_t GetImageDepth(const Image *image,ExceptionInfo *exception)
 
         channel=GetPixelChannelMapChannel(image,i);
         traits=GetPixelChannelMapTraits(image,channel);
-        if ((traits == UndefinedPixelTrait) ||
-            (channel == IndexPixelChannel))
+        if ((traits == UndefinedPixelTrait) || (channel == IndexPixelChannel) ||
+            (channel == MaskPixelChannel))
           continue;
         while (current_depth[id] < MAGICKCORE_QUANTUM_DEPTH)
         {
@@ -982,6 +992,11 @@ MagickExport MagickBooleanType SetImageDepth(Image *image,
           register ssize_t
             i;
 
+          if (GetPixelMask(image,q) != 0)
+            {
+              q+=GetPixelChannels(image);
+              continue;
+            }
           for (i=0; i < (ssize_t) GetPixelChannels(image); i++)
           {
             PixelChannel
@@ -993,7 +1008,7 @@ MagickExport MagickBooleanType SetImageDepth(Image *image,
             channel=GetPixelChannelMapChannel(image,i);
             traits=GetPixelChannelMapTraits(image,channel);
             if ((traits == UndefinedPixelTrait) ||
-                (channel == IndexPixelChannel))
+                (channel == IndexPixelChannel) || (channel == MaskPixelChannel))
               continue;
             q[i]=depth_map[ScaleQuantumToMap(q[i])];
           }
@@ -1039,6 +1054,11 @@ MagickExport MagickBooleanType SetImageDepth(Image *image,
       register ssize_t
         i;
 
+      if (GetPixelMask(image,q) != 0)
+        {
+          q+=GetPixelChannels(image);
+          continue;
+        }
       for (i=0; i < (ssize_t) GetPixelChannels(image); i++)
       {
         PixelChannel
@@ -1049,7 +1069,8 @@ MagickExport MagickBooleanType SetImageDepth(Image *image,
 
         channel=GetPixelChannelMapChannel(image,i);
         traits=GetPixelChannelMapTraits(image,channel);
-        if ((traits == UndefinedPixelTrait) || (channel == IndexPixelChannel))
+        if ((traits == UndefinedPixelTrait) || (channel == IndexPixelChannel) ||
+            (channel == MaskPixelChannel))
           continue;
         q[i]=ScaleAnyToQuantum(ScaleQuantumToAny(q[i],range),range);
       }
index bfceb8ce0026ce5727995821c2ff969bd8104a0a..92fc0f069b573c7612a062f2a5168ceac4b1753d 100644 (file)
@@ -119,7 +119,8 @@ typedef struct _CacheInfo
     colorspace;
 
   MagickBooleanType
-    matte;
+    matte,
+    masky;
 
   size_t
     columns,
index c6185d48fe1c33d8fb90bc92339c749e919ac000..60008442eeaa8c626bd466c47f2b6b44a5cabafb 100644 (file)
@@ -358,115 +358,6 @@ MagickPrivate void CacheComponentTerminus(void)
 %                                                                             %
 %                                                                             %
 %                                                                             %
-+   C l i p P i x e l C a c h e N e x u s                                     %
-%                                                                             %
-%                                                                             %
-%                                                                             %
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-%
-%  ClipPixelCacheNexus() clips the cache nexus as defined by the image clip
-%  mask.  It returns MagickTrue if the pixel region is clipped, otherwise
-%  MagickFalse.
-%
-%  The format of the ClipPixelCacheNexus() method is:
-%
-%      MagickBooleanType ClipPixelCacheNexus(Image *image,NexusInfo *nexus_info,
-%        ExceptionInfo *exception)
-%
-%  A description of each parameter follows:
-%
-%    o image: the image.
-%
-%    o nexus_info: the cache nexus to clip.
-%
-%    o exception: return any errors or warnings in this structure.
-%
-*/
-static MagickBooleanType ClipPixelCacheNexus(Image *image,
-  NexusInfo *nexus_info,ExceptionInfo *exception)
-{
-  CacheInfo
-    *cache_info;
-
-  MagickSizeType
-    number_pixels;
-
-  NexusInfo
-    **clip_nexus,
-    **image_nexus;
-
-  register const Quantum
-    *restrict p,
-    *restrict r;
-
-  register Quantum
-    *restrict q;
-
-  register ssize_t
-    x;
-
-  /*
-    Clip the image as defined by the clipping mask.
-  */
-  if (image->debug != MagickFalse)
-    (void) LogMagickEvent(TraceEvent,GetMagickModule(),"%s",image->filename);
-  if (image->clip_mask == (Image *) NULL)
-    return(MagickFalse);
-  cache_info=(CacheInfo *) image->cache;
-  if (cache_info == (Cache) NULL)
-    return(MagickFalse);
-  image_nexus=AcquirePixelCacheNexus(1);
-  clip_nexus=AcquirePixelCacheNexus(1);
-  if ((image_nexus == (NexusInfo **) NULL) ||
-      (clip_nexus == (NexusInfo **) NULL))
-    ThrowBinaryException(CacheError,"UnableToGetCacheNexus",image->filename);
-  p=(const Quantum *) GetAuthenticPixelCacheNexus(image,nexus_info->region.x,
-    nexus_info->region.y,nexus_info->region.width,nexus_info->region.height,
-    image_nexus[0],exception);
-  q=nexus_info->pixels;
-  r=GetVirtualPixelsFromNexus(image->clip_mask,MaskVirtualPixelMethod,
-    nexus_info->region.x,nexus_info->region.y,nexus_info->region.width,
-    nexus_info->region.height,clip_nexus[0],exception);
-  number_pixels=(MagickSizeType) nexus_info->region.width*
-    nexus_info->region.height;
-  for (x=0; x < (ssize_t) number_pixels; x++)
-  {
-    register ssize_t
-      i;
-
-    if ((p == (const Quantum *) NULL) || (r == (const Quantum *) NULL))
-      break;
-    if (GetPixelIntensity(image->clip_mask,r) > ((Quantum) QuantumRange/2))
-      for (i=0; i < (ssize_t) image->number_channels; i++)
-      {
-        PixelChannel
-          channel;
-
-        PixelTrait
-          traits;
-
-        channel=GetPixelChannelMapChannel(image,i);
-        traits=GetPixelChannelMapTraits(image,channel);
-        if (traits == UndefinedPixelTrait)
-          continue;
-        q[i]=p[i];
-      }
-    p+=GetPixelChannels(image);
-    q+=GetPixelChannels(image);
-    r+=GetPixelChannels(image->clip_mask);
-  }
-  clip_nexus=DestroyPixelCacheNexus(clip_nexus,1);
-  image_nexus=DestroyPixelCacheNexus(image_nexus,1);
-  if (x < (ssize_t) number_pixels)
-    return(MagickFalse);
-  return(MagickTrue);
-}
-\f
-/*
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-%                                                                             %
-%                                                                             %
-%                                                                             %
 +   C l o n e P i x e l C a c h e                                             %
 %                                                                             %
 %                                                                             %
@@ -1944,6 +1835,7 @@ static inline MagickBooleanType ValidatePixelCacheMorphology(const Image *image)
   if ((image->storage_class != cache_info->storage_class) ||
       (image->colorspace != cache_info->colorspace) ||
       (image->matte != cache_info->matte) ||
+      (image->masky != cache_info->masky) ||
       (image->columns != cache_info->columns) ||
       (image->rows != cache_info->rows) ||
       (image->number_channels != cache_info->number_channels) ||
@@ -3745,132 +3637,6 @@ MagickPrivate const Quantum *GetVirtualPixelsNexus(const Cache cache,
 %                                                                             %
 %                                                                             %
 %                                                                             %
-+   M a s k P i x e l C a c h e N e x u s                                     %
-%                                                                             %
-%                                                                             %
-%                                                                             %
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-%
-%  MaskPixelCacheNexus() masks the cache nexus as defined by the image mask.
-%  The method returns MagickTrue if the pixel region is masked, otherwise
-%  MagickFalse.
-%
-%  The format of the MaskPixelCacheNexus() method is:
-%
-%      MagickBooleanType MaskPixelCacheNexus(Image *image,
-%        NexusInfo *nexus_info,ExceptionInfo *exception)
-%
-%  A description of each parameter follows:
-%
-%    o image: the image.
-%
-%    o nexus_info: the cache nexus to clip.
-%
-%    o exception: return any errors or warnings in this structure.
-%
-*/
-static MagickBooleanType MaskPixelCacheNexus(Image *image,NexusInfo *nexus_info,
-  ExceptionInfo *exception)
-{
-  CacheInfo
-    *cache_info;
-
-  MagickSizeType
-    number_pixels;
-
-  NexusInfo
-    **clip_nexus,
-    **image_nexus;
-
-  register const Quantum
-    *restrict p,
-    *restrict r;
-
-  register Quantum
-    *restrict q;
-
-  register ssize_t
-    x;
-
-  /*
-    Prevent updates to image pixels specified by the mask.
-  */
-  if (image->debug != MagickFalse)
-    (void) LogMagickEvent(TraceEvent,GetMagickModule(),"%s",image->filename);
-  if (image->mask == (Image *) NULL)
-    return(MagickFalse);
-  cache_info=(CacheInfo *) image->cache;
-  if (cache_info == (Cache) NULL)
-    return(MagickFalse);
-  image_nexus=AcquirePixelCacheNexus(1);
-  clip_nexus=AcquirePixelCacheNexus(1);
-  if ((image_nexus == (NexusInfo **) NULL) ||
-      (clip_nexus == (NexusInfo **) NULL))
-    ThrowBinaryException(CacheError,"UnableToGetCacheNexus",image->filename);
-  p=(const Quantum *) GetAuthenticPixelCacheNexus(image,
-    nexus_info->region.x,nexus_info->region.y,nexus_info->region.width,
-    nexus_info->region.height,image_nexus[0],exception);
-  q=nexus_info->pixels;
-  r=GetVirtualPixelsFromNexus(image->mask,MaskVirtualPixelMethod,
-    nexus_info->region.x,nexus_info->region.y,nexus_info->region.width,
-    nexus_info->region.height,clip_nexus[0],exception);
-  number_pixels=(MagickSizeType) nexus_info->region.width*
-    nexus_info->region.height;
-  for (x=0; x < (ssize_t) number_pixels; x++)
-  {
-    MagickRealType
-      alpha,
-      Da,
-      gamma,
-      Sa;
-
-    register ssize_t
-      i;
-
-    if ((p == (const Quantum *) NULL) || (r == (const Quantum *) NULL))
-      break;
-    Sa=QuantumScale*GetPixelIntensity(image->mask,r);
-    Da=QuantumScale*GetPixelAlpha(image,q);
-    alpha=Sa*(-Da)+Sa+Da;
-    gamma=1.0/(fabs(alpha) <= MagickEpsilon ? 1.0 : alpha);
-    for (i=0; i < (ssize_t) image->number_channels; i++)
-    {
-      MagickRealType
-        Dc,
-        pixel,
-        Sc;
-
-      PixelChannel
-        channel;
-
-      PixelTrait
-        traits;
-
-      channel=GetPixelChannelMapChannel(image,i);
-      traits=GetPixelChannelMapTraits(image,channel);
-      if (traits == UndefinedPixelTrait)
-        continue;
-      Sc=(MagickRealType) p[i];
-      Dc=(MagickRealType) q[i];
-      pixel=gamma*(Sa*Sc-Sa*Da*Dc+Da*Dc);
-      q[i]=ClampToQuantum(pixel);
-    }
-    p+=GetPixelChannels(image);
-    q+=GetPixelChannels(image);
-    r+=GetPixelChannels(image->mask);
-  }
-  clip_nexus=DestroyPixelCacheNexus(clip_nexus,1);
-  image_nexus=DestroyPixelCacheNexus(image_nexus,1);
-  if (x < (ssize_t) number_pixels)
-    return(MagickFalse);
-  return(MagickTrue);
-}
-\f
-/*
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-%                                                                             %
-%                                                                             %
-%                                                                             %
 +   O p e n P i x e l C a c h e                                               %
 %                                                                             %
 %                                                                             %
@@ -3987,6 +3753,7 @@ static MagickBooleanType OpenPixelCache(Image *image,const MapMode mode,
   cache_info->storage_class=image->storage_class;
   cache_info->colorspace=image->colorspace;
   cache_info->matte=image->matte;
+  cache_info->masky=image->masky;
   cache_info->rows=image->rows;
   cache_info->columns=image->columns;
   InitializePixelChannelMap(image);
@@ -5021,8 +4788,7 @@ static Quantum *SetPixelCacheNexusPixels(const Image *image,
   if (cache_info->type == UndefinedCache)
     return((Quantum *) NULL);
   nexus_info->region=(*region);
-  if ((cache_info->type != DiskCache) && (cache_info->type != PingCache) &&
-      (image->clip_mask == (Image *) NULL) && (image->mask == (Image *) NULL))
+  if ((cache_info->type != DiskCache) && (cache_info->type != PingCache))
     {
       ssize_t
         x,
@@ -5188,12 +4954,6 @@ MagickPrivate MagickBooleanType SyncAuthenticPixelCacheNexus(Image *image,
   assert(cache_info->signature == MagickSignature);
   if (cache_info->type == UndefinedCache)
     return(MagickFalse);
-  if ((image->clip_mask != (Image *) NULL) &&
-      (ClipPixelCacheNexus(image,nexus_info,exception) == MagickFalse))
-    return(MagickFalse);
-  if ((image->mask != (Image *) NULL) &&
-      (MaskPixelCacheNexus(image,nexus_info,exception) == MagickFalse))
-    return(MagickFalse);
   if (IsPixelAuthentic(cache_info,nexus_info) != MagickFalse)
     return(MagickTrue);
   assert(cache_info->signature == MagickSignature);
index 265c5eeb6c304d4d916cf7047bf58cb9169fac27..6d638e0409053dceed0faeafa8bef326b6b2f944 100644 (file)
@@ -216,6 +216,13 @@ MagickExport Image *CompareImages(Image *image,const Image *reconstruct_image,
         i;
 
       difference=MagickFalse;
+      if (GetPixelMask(image,p) != 0)
+        {
+          p+=GetPixelChannels(image);
+          q+=GetPixelChannels(reconstruct_image);
+          r+=GetPixelChannels(highlight_image);
+          continue;
+        }
       for (i=0; i < (ssize_t) GetPixelChannels(image); i++)
       {
         MagickRealType
@@ -353,6 +360,12 @@ static MagickBooleanType GetAbsoluteDistortion(const Image *image,
         i;
 
       difference=MagickFalse;
+      if (GetPixelMask(image,p) != 0)
+        {
+          p+=GetPixelChannels(image);
+          q+=GetPixelChannels(reconstruct_image);
+          continue;
+        }
       for (i=0; i < (ssize_t) GetPixelChannels(image); i++)
       {
         PixelChannel
@@ -468,6 +481,12 @@ static MagickBooleanType GetFuzzDistortion(const Image *image,
       register ssize_t
         i;
 
+      if (GetPixelMask(image,p) != 0)
+        {
+          p+=GetPixelChannels(image);
+          q+=GetPixelChannels(reconstruct_image);
+          continue;
+        }
       for (i=0; i < (ssize_t) GetPixelChannels(image); i++)
       {
         MagickRealType
@@ -563,6 +582,12 @@ static MagickBooleanType GetMeanAbsoluteDistortion(const Image *image,
       register ssize_t
         i;
 
+      if (GetPixelMask(image,p) != 0)
+        {
+          p+=GetPixelChannels(image);
+          q+=GetPixelChannels(reconstruct_image);
+          continue;
+        }
       for (i=0; i < (ssize_t) GetPixelChannels(image); i++)
       {
         MagickRealType
@@ -655,6 +680,12 @@ static MagickBooleanType GetMeanErrorPerPixel(Image *image,
       register ssize_t
         i;
 
+      if (GetPixelMask(image,p) != 0)
+        {
+          p+=GetPixelChannels(image);
+          q+=GetPixelChannels(reconstruct_image);
+          continue;
+        }
       for (i=0; i < (ssize_t) GetPixelChannels(image); i++)
       {
         MagickRealType
@@ -747,6 +778,12 @@ static MagickBooleanType GetMeanSquaredDistortion(const Image *image,
       register ssize_t
         i;
 
+      if (GetPixelMask(image,p) != 0)
+        {
+          p+=GetPixelChannels(image);
+          q+=GetPixelChannels(reconstruct_image);
+          continue;
+        }
       for (i=0; i < (ssize_t) GetPixelChannels(image); i++)
       {
         MagickRealType
@@ -855,6 +892,12 @@ static MagickBooleanType GetNormalizedCrossCorrelationDistortion(
       register ssize_t
         i;
 
+      if (GetPixelMask(image,p) != 0)
+        {
+          p+=GetPixelChannels(image);
+          q+=GetPixelChannels(reconstruct_image);
+          continue;
+        }
       for (i=0; i < (ssize_t) GetPixelChannels(image); i++)
       {
         PixelChannel
@@ -877,7 +920,7 @@ static MagickBooleanType GetNormalizedCrossCorrelationDistortion(
           reconstruct_statistics[channel].mean);
       }
       p+=GetPixelChannels(image);
-      q+=GetPixelChannels(image);
+      q+=GetPixelChannels(reconstruct_image);
     }
     if (image->progress_monitor != (MagickProgressMonitor) NULL)
       {
@@ -958,8 +1001,8 @@ static MagickBooleanType GetPeakAbsoluteDistortion(const Image *image,
     if (status == MagickFalse)
       continue;
     p=GetCacheViewVirtualPixels(image_view,0,y,image->columns,1,exception);
-    q=GetCacheViewVirtualPixels(reconstruct_view,0,y,
-      reconstruct_image->columns,1,exception);
+    q=GetCacheViewVirtualPixels(reconstruct_view,0,y,reconstruct_image->columns,
+      1,exception);
     if ((p == (const Quantum *) NULL) || (q == (const Quantum *) NULL))
       {
         status=MagickFalse;
@@ -971,6 +1014,12 @@ static MagickBooleanType GetPeakAbsoluteDistortion(const Image *image,
       register ssize_t
         i;
 
+      if (GetPixelMask(image,p) != 0)
+        {
+          p+=GetPixelChannels(image);
+          q+=GetPixelChannels(reconstruct_image);
+          continue;
+        }
       for (i=0; i < (ssize_t) GetPixelChannels(image); i++)
       {
         MagickRealType
@@ -999,7 +1048,7 @@ static MagickBooleanType GetPeakAbsoluteDistortion(const Image *image,
           channel_distortion[CompositePixelChannel]=distance;
       }
       p+=GetPixelChannels(image);
-      q+=GetPixelChannels(image);
+      q+=GetPixelChannels(reconstruct_image);
     }
 #if defined(MAGICKCORE_OPENMP_SUPPORT)
   #pragma omp critical (MagickCore_GetPeakAbsoluteError)
@@ -1379,6 +1428,12 @@ MagickExport MagickBooleanType IsImagesEqual(Image *image,
       register ssize_t
         i;
 
+      if (GetPixelMask(image,p) != 0)
+        {
+          p+=GetPixelChannels(image);
+          q+=GetPixelChannels(reconstruct_image);
+          continue;
+        }
       for (i=0; i < (ssize_t) GetPixelChannels(image); i++)
       {
         MagickRealType
@@ -1576,6 +1631,11 @@ MagickExport Image *SimilarityImage(Image *image,const Image *reference,
           offset->x=x;
           offset->y=y;
         }
+      if (GetPixelMask(image,q) != 0)
+        {
+          q+=GetPixelChannels(image);
+          continue;
+        }
       for (i=0; i < (ssize_t) GetPixelChannels(image); i++)
       {
         PixelChannel
index 7532102a0346b4adac96ef5b44ff100d1bd075bd..b12212d18d076d691d9091d587fb48111e64cc1b 100644 (file)
@@ -394,6 +394,11 @@ static MagickBooleanType CompositeOverImage(Image *image,
           */
           (void) GetOneVirtualPixel(composite_image,x-x_offset,y-y_offset,
             source,exception);
+          if (GetPixelMask(image,q) != 0)
+            {
+              q+=GetPixelChannels(image);
+              continue;
+            }
           for (i=0; i < (ssize_t) GetPixelChannels(image); i++)
           {
             PixelChannel
@@ -405,8 +410,7 @@ static MagickBooleanType CompositeOverImage(Image *image,
 
             channel=GetPixelChannelMapChannel(image,i);
             traits=GetPixelChannelMapTraits(image,channel);
-            composite_traits=GetPixelChannelMapTraits(composite_image,
-              channel);
+            composite_traits=GetPixelChannelMapTraits(composite_image,channel);
             if ((traits == UndefinedPixelTrait) ||
                 (composite_traits == UndefinedPixelTrait))
               continue;
@@ -661,6 +665,12 @@ MagickExport MagickBooleanType CompositeImage(Image *image,
           register ssize_t
             i;
 
+          if (GetPixelMask(image,p) != 0)
+            {
+              p+=GetPixelChannels(composite_image);
+              q+=GetPixelChannels(image);
+              continue;
+            }
           for (i=0; i < (ssize_t) GetPixelChannels(composite_image); i++)
           {
             PixelChannel
@@ -1234,6 +1244,11 @@ MagickExport MagickBooleanType CompositeImage(Image *image,
           */
           (void) GetOneVirtualPixel(composite_image,x-x_offset,y-y_offset,
             source,exception);
+          if (GetPixelMask(image,q) != 0)
+            {
+              q+=GetPixelChannels(image);
+              continue;
+            }
           for (i=0; i < (ssize_t) GetPixelChannels(image); i++)
           {
             MagickRealType
@@ -1402,6 +1417,12 @@ MagickExport MagickBooleanType CompositeImage(Image *image,
           break;
         }
       }
+      if (GetPixelMask(image,p) != 0)
+        {
+          p+=GetPixelChannels(composite_image);
+          q+=GetPixelChannels(image);
+          continue;
+        }
       for (i=0; i < (ssize_t) GetPixelChannels(image); i++)
       {
         double
@@ -2390,6 +2411,12 @@ MagickExport MagickBooleanType TextureImage(Image *image,
         register ssize_t
           i;
 
+        if (GetPixelMask(image,p) != 0)
+          {
+            p+=GetPixelChannels(texture_image);
+            q+=GetPixelChannels(image);
+            continue;
+          }
         for (i=0; i < (ssize_t) GetPixelChannels(texture_image); i++)
         {
           PixelChannel
index c9a35eb5c0302a694819904436aa2790875f9539..6014519ccae7b1ce79c8b20c90c8f1b5e73a8dd3 100644 (file)
@@ -1033,17 +1033,6 @@ MagickExport MagickBooleanType WriteImage(const ImageInfo *image_info,
   if (*write_info->magick == '\0')
     (void) CopyMagickString(write_info->magick,image->magick,MaxTextExtent);
   (void) SetImageInfo(write_info,1,sans_exception);
-  if (LocaleCompare(write_info->magick,"clipmask") == 0)
-    {
-      if (image->clip_mask == (Image *) NULL)
-        {
-          (void) ThrowMagickException(exception,GetMagickModule(),
-            OptionError,"NoClipPathDefined","`%s'",image->filename);
-          return(MagickFalse);
-        }
-      image=image->clip_mask;
-      (void) SetImageInfo(write_info,1,sans_exception);
-    }
   (void) CopyMagickString(filename,image->filename,MaxTextExtent);
   (void) CopyMagickString(image->filename,write_info->filename,MaxTextExtent);
   domain=CoderPolicyDomain;
index 018f32006066258163daf3cba12190e648c106c0..d0b30bfa389302603ec225c9e6a7ed02ce063dec 100644 (file)
@@ -703,6 +703,11 @@ MagickExport MagickBooleanType RaiseImage(Image *image,
       }
     for (x=0; x < y; x++)
     {
+      if (GetPixelMask(image,q) != 0)
+        {
+          q+=GetPixelChannels(image);
+          continue;
+        }
       for (i=0; i < (ssize_t) GetPixelChannels(image); i++)
       {
         PixelChannel
@@ -722,6 +727,11 @@ MagickExport MagickBooleanType RaiseImage(Image *image,
     }
     for ( ; x < (ssize_t) (image->columns-y); x++)
     {
+      if (GetPixelMask(image,q) != 0)
+        {
+          q+=GetPixelChannels(image);
+          continue;
+        }
       for (i=0; i < (ssize_t) GetPixelChannels(image); i++)
       {
         PixelChannel
@@ -741,6 +751,11 @@ MagickExport MagickBooleanType RaiseImage(Image *image,
     }
     for ( ; x < (ssize_t) image->columns; x++)
     {
+      if (GetPixelMask(image,q) != 0)
+        {
+          q+=GetPixelChannels(image);
+          continue;
+        }
       for (i=0; i < (ssize_t) GetPixelChannels(image); i++)
       {
         PixelChannel
@@ -792,6 +807,11 @@ MagickExport MagickBooleanType RaiseImage(Image *image,
       }
     for (x=0; x < (ssize_t) raise_info->width; x++)
     {
+      if (GetPixelMask(image,q) != 0)
+        {
+          q+=GetPixelChannels(image);
+          continue;
+        }
       for (i=0; i < (ssize_t) GetPixelChannels(image); i++)
       {
         PixelChannel
@@ -813,6 +833,11 @@ MagickExport MagickBooleanType RaiseImage(Image *image,
       q+=GetPixelChannels(image);
     for ( ; x < (ssize_t) image->columns; x++)
     {
+      if (GetPixelMask(image,q) != 0)
+        {
+          q+=GetPixelChannels(image);
+          continue;
+        }
       for (i=0; i < (ssize_t) GetPixelChannels(image); i++)
       {
         PixelChannel
@@ -864,6 +889,11 @@ MagickExport MagickBooleanType RaiseImage(Image *image,
       }
     for (x=0; x < (ssize_t) (image->rows-y); x++)
     {
+      if (GetPixelMask(image,q) != 0)
+        {
+          q+=GetPixelChannels(image);
+          continue;
+        }
       for (i=0; i < (ssize_t) GetPixelChannels(image); i++)
       {
         PixelChannel
@@ -902,6 +932,11 @@ MagickExport MagickBooleanType RaiseImage(Image *image,
     }
     for ( ; x < (ssize_t) image->columns; x++)
     {
+      if (GetPixelMask(image,q) != 0)
+        {
+          q+=GetPixelChannels(image);
+          continue;
+        }
       for (i=0; i < (ssize_t) GetPixelChannels(image); i++)
       {
         PixelChannel
index 7177eaddae91ca1c61b51bd38f9fccb679d9fbf0..f431d0e31f58e2275530fc62a182c902e56f4152 100644 (file)
@@ -1392,7 +1392,10 @@ MagickExport MagickBooleanType DrawClipPath(Image *image,
   const DrawInfo *draw_info,const char *name,ExceptionInfo *exception)
 {
   char
-    clip_mask[MaxTextExtent];
+    filename[MaxTextExtent];
+
+  Image
+    *clip_mask;
 
   const char
     *value;
@@ -1408,26 +1411,17 @@ MagickExport MagickBooleanType DrawClipPath(Image *image,
   if (image->debug != MagickFalse)
     (void) LogMagickEvent(TraceEvent,GetMagickModule(),"%s",image->filename);
   assert(draw_info != (const DrawInfo *) NULL);
-  (void) FormatLocaleString(clip_mask,MaxTextExtent,"%s",name);
-  value=GetImageArtifact(image,clip_mask);
+  (void) FormatLocaleString(filename,MaxTextExtent,"%s",name);
+  value=GetImageArtifact(image,filename);
   if (value == (const char *) NULL)
     return(MagickFalse);
-  if (image->clip_mask == (Image *) NULL)
-    {
-      Image
-        *clip_mask;
-
-      clip_mask=CloneImage(image,image->columns,image->rows,MagickTrue,
-        exception);
-      if (clip_mask == (Image *) NULL)
-        return(MagickFalse);
-      (void) SetImageClipMask(image,clip_mask,exception);
-      clip_mask=DestroyImage(clip_mask);
-    }
+  clip_mask=CloneImage(image,image->columns,image->rows,MagickTrue,exception);
+  if (clip_mask == (Image *) NULL)
+    return(MagickFalse);
   (void) QueryColorCompliance("#0000",AllCompliance,
-    &image->clip_mask->background_color,exception);
-  image->clip_mask->background_color.alpha=(Quantum) TransparentAlpha;
-  (void) SetImageBackgroundColor(image->clip_mask,exception);
+    &clip_mask->background_color,exception);
+  clip_mask->background_color.alpha=(Quantum) TransparentAlpha;
+  (void) SetImageBackgroundColor(clip_mask,exception);
   if (image->debug != MagickFalse)
     (void) LogMagickEvent(DrawEvent,GetMagickModule(),"\nbegin clip-path %s",
       draw_info->clip_mask);
@@ -1436,9 +1430,11 @@ MagickExport MagickBooleanType DrawClipPath(Image *image,
   (void) QueryColorCompliance("#ffffff",AllCompliance,&clone_info->fill,
     exception);
   clone_info->clip_mask=(char *) NULL;
-  status=DrawImage(image->clip_mask,clone_info,exception);
-  status|=NegateImage(image->clip_mask,MagickFalse,exception);
+  status|=NegateImage(clip_mask,MagickFalse,exception);
+  (void) SetImageMask(image,clip_mask,exception);
+  clip_mask=DestroyImage(clip_mask);
   clone_info=DestroyDrawInfo(clone_info);
+  status=DrawImage(image,clone_info,exception);
   if (image->debug != MagickFalse)
     (void) LogMagickEvent(DrawEvent,GetMagickModule(),"end clip-path");
   return(status != 0 ? MagickTrue : MagickFalse);
@@ -2250,7 +2246,7 @@ MagickExport MagickBooleanType DrawImage(Image *image,const DrawInfo *draw_info,
                 if (graphic_context[n]->clip_mask != (char *) NULL)
                   if (LocaleCompare(graphic_context[n]->clip_mask,
                       graphic_context[n-1]->clip_mask) != 0)
-                    (void) SetImageClipMask(image,(Image *) NULL,exception);
+                    image->masky=MagickFalse;
                 graphic_context[n]=DestroyDrawInfo(graphic_context[n]);
                 n--;
                 break;
index e0072b87d4830b2fc67d69321ce5d3051a581571..6459f39becf74d8896848f7c7d566f9057f3ca06 100644 (file)
@@ -346,6 +346,12 @@ MagickExport Image *AdaptiveBlurImage(const Image *image,const double radius,
         break;
       center=(ssize_t) GetPixelChannels(image)*(width-j)*
         ((width-j)/2L)+GetPixelChannels(image)*((width-j)/2L);
+      if (GetPixelMask(image,q) != 0)
+        {
+          q+=GetPixelChannels(blur_image);
+          r+=GetPixelChannels(edge_image);
+          continue;
+        }
       for (i=0; i < (ssize_t) GetPixelChannels(image); i++)
       {
         MagickRealType
@@ -668,6 +674,12 @@ MagickExport Image *AdaptiveSharpenImage(const Image *image,const double radius,
         break;
       center=(ssize_t) GetPixelChannels(image)*(width-j)*
         ((width-j)/2L)+GetPixelChannels(image)*((width-j)/2);
+      if (GetPixelMask(image,q) != 0)
+        {
+          q+=GetPixelChannels(sharp_image);
+          r+=GetPixelChannels(edge_image);
+          continue;
+        }
       for (i=0; i < (ssize_t) GetPixelChannels(image); i++)
       {
         MagickRealType
@@ -972,6 +984,12 @@ MagickExport Image *BlurImage(const Image *image,const double radius,
       register ssize_t
         i;
 
+      if (GetPixelMask(image,p) != 0)
+        {
+          p+=GetPixelChannels(image);
+          q+=GetPixelChannels(blur_image);
+          continue;
+        }
       for (i=0; i < (ssize_t) GetPixelChannels(image); i++)
       {
         MagickRealType
@@ -1094,6 +1112,12 @@ MagickExport Image *BlurImage(const Image *image,const double radius,
       register ssize_t
         i;
 
+      if (GetPixelMask(blur_image,p) != 0)
+        {
+          p+=GetPixelChannels(blur_image);
+          q+=GetPixelChannels(blur_image);
+          continue;
+        }
       for (i=0; i < (ssize_t) GetPixelChannels(blur_image); i++)
       {
         MagickRealType
@@ -1336,6 +1360,12 @@ MagickExport Image *ConvolveImage(const Image *image,
       register ssize_t
         i;
 
+      if (GetPixelMask(image,p) != 0)
+        {
+          p+=GetPixelChannels(image);
+          q+=GetPixelChannels(convolve_image);
+          continue;
+        }
       for (i=0; i < (ssize_t) GetPixelChannels(image); i++)
       {
         MagickRealType
@@ -2182,6 +2212,12 @@ MagickExport Image *MotionBlurImage(const Image *image,const double radius,
       register ssize_t
         i;
 
+      if (GetPixelMask(image,p) != 0)
+        {
+          p+=GetPixelChannels(image);
+          q+=GetPixelChannels(blur_image);
+          continue;
+        }
       for (i=0; i < (ssize_t) GetPixelChannels(image); i++)
       {
         MagickRealType
@@ -2980,6 +3016,12 @@ MagickExport Image *RadialBlurImage(const Image *image,const double angle,
             if (step >= n)
               step=n-1;
         }
+      if (GetPixelMask(image,p) != 0)
+        {
+         p+=GetPixelChannels(image);
+         q+=GetPixelChannels(blur_image);
+          continue;
+        }
       for (i=0; i < (ssize_t) GetPixelChannels(image); i++)
       {
         MagickRealType
@@ -3256,6 +3298,12 @@ MagickExport Image *SelectiveBlurImage(const Image *image,const double radius,
       register ssize_t
         i;
 
+      if (GetPixelMask(image,p) != 0)
+        {
+          p+=GetPixelChannels(image);
+          q+=GetPixelChannels(blur_image);
+          continue;
+        }
       for (i=0; i < (ssize_t) GetPixelChannels(image); i++)
       {
         MagickRealType
@@ -3542,6 +3590,14 @@ MagickExport Image *ShadeImage(const Image *image,const MagickBooleanType gray,
                 shade=distance/sqrt((double) normal_distance);
             }
         }
+      if (GetPixelMask(image,pre) != 0)
+        {
+          pre+=GetPixelChannels(image);
+          center+=GetPixelChannels(image);
+          post+=GetPixelChannels(image);
+          q+=GetPixelChannels(shade_image);
+          continue;
+        }
       for (i=0; i < (ssize_t) GetPixelChannels(image); i++)
       {
         PixelChannel
@@ -3953,6 +4009,12 @@ MagickExport Image *UnsharpMaskImage(const Image *image,const double radius,
       register ssize_t
         i;
 
+      if (GetPixelMask(image,p) != 0)
+        {
+          p+=GetPixelChannels(image);
+          q+=GetPixelChannels(unsharp_image);
+          continue;
+        }
       for (i=0; i < (ssize_t) GetPixelChannels(image); i++)
       {
         MagickRealType
index 2b54d699ca924844035343bf6cea915948c1a3a6..a574ee91e1438cb2bf5285622457568a1e5c6fcc 100644 (file)
@@ -379,6 +379,11 @@ MagickExport MagickBooleanType ClutImage(Image *image,const Image *clut_image,
       register ssize_t
         i;
 
+      if (GetPixelMask(image,q) != 0)
+        {
+          q+=GetPixelChannels(image);
+          continue;
+        }
       for (i=0; i < (ssize_t) GetPixelChannels(clut_image); i++)
       {
         PixelChannel
@@ -1225,6 +1230,11 @@ MagickExport MagickBooleanType ContrastStretchImage(Image *image,
       register ssize_t
         i;
 
+      if (GetPixelMask(image,q) != 0)
+        {
+          q+=GetPixelChannels(image);
+          continue;
+        }
       for (i=0; i < (ssize_t) GetPixelChannels(image); i++)
       {
         PixelChannel
@@ -1380,6 +1390,12 @@ MagickExport Image *EnhanceImage(const Image *image,ExceptionInfo *exception)
       register ssize_t
         i;
 
+      if (GetPixelMask(image,p) != 0)
+        {
+          p+=GetPixelChannels(image);
+          q+=GetPixelChannels(enhance_image);
+          continue;
+        }
       for (i=0; i < (ssize_t) GetPixelChannels(image); i++)
       {
         MagickRealType
@@ -1688,6 +1704,11 @@ MagickExport MagickBooleanType EqualizeImage(Image *image,
       register ssize_t
         i;
 
+      if (GetPixelMask(image,q) != 0)
+        {
+          q+=GetPixelChannels(image);
+          continue;
+        }
       for (i=0; i < (ssize_t) GetPixelChannels(image); i++)
       {
         PixelChannel
@@ -1856,6 +1877,11 @@ MagickExport MagickBooleanType GammaImage(Image *image,const double gamma,
       register ssize_t
         i;
 
+      if (GetPixelMask(image,q) != 0)
+        {
+          q+=GetPixelChannels(image);
+          continue;
+        }
       for (i=0; i < (ssize_t) GetPixelChannels(image); i++)
       {
         PixelChannel
@@ -2228,6 +2254,11 @@ MagickExport MagickBooleanType LevelImage(Image *image,const double black_point,
       register ssize_t
         i;
 
+      if (GetPixelMask(image,q) != 0)
+        {
+          q+=GetPixelChannels(image);
+          continue;
+        }
       for (i=0; i < (ssize_t) GetPixelChannels(image); i++)
       {
         PixelChannel
@@ -2389,6 +2420,11 @@ MagickExport MagickBooleanType LevelizeImage(Image *image,
       register ssize_t
         i;
 
+      if (GetPixelMask(image,q) != 0)
+        {
+          q+=GetPixelChannels(image);
+          continue;
+        }
       for (i=0; i < (ssize_t) GetPixelChannels(image); i++)
       {
         PixelChannel
@@ -3068,7 +3104,8 @@ MagickExport MagickBooleanType NegateImage(Image *image,
           register ssize_t
             i;
 
-          if (IsPixelGray(image,q) != MagickFalse)
+          if ((GetPixelMask(image,q) != 0) ||
+              (IsPixelGray(image,q) != MagickFalse))
             {
               q+=GetPixelChannels(image);
               continue;
@@ -3135,6 +3172,11 @@ MagickExport MagickBooleanType NegateImage(Image *image,
       register ssize_t
         i;
 
+      if (GetPixelMask(image,q) != 0)
+        {
+          q+=GetPixelChannels(image);
+          continue;
+        }
       for (i=0; i < (ssize_t) GetPixelChannels(image); i++)
       {
         PixelChannel
@@ -3361,6 +3403,11 @@ MagickExport MagickBooleanType SigmoidalContrastImage(Image *image,
       register ssize_t
         i;
 
+      if (GetPixelMask(image,q) != 0)
+        {
+          q+=GetPixelChannels(image);
+          continue;
+        }
       for (i=0; i < (ssize_t) GetPixelChannels(image); i++)
       {
         PixelChannel
index ff252abfe3f2a8e2bdb459459114bfbf0e137d1e..d0989a6471b2520a456b5ea79e1ff6ca2a5bd095 100644 (file)
@@ -335,6 +335,12 @@ MagickExport Image *AddNoiseImage(const Image *image,const NoiseType noise_type,
       register ssize_t
         i;
 
+      if (GetPixelMask(image,p) != 0)
+        {
+          p+=GetPixelChannels(image);
+          q+=GetPixelChannels(noise_image);
+          continue;
+        }
       for (i=0; i < (ssize_t) GetPixelChannels(image); i++)
       {
         PixelChannel
@@ -751,6 +757,12 @@ MagickExport Image *ColorizeImage(const Image *image,const char *blend,
       register ssize_t
         i;
 
+      if (GetPixelMask(image,p) != 0)
+        {
+          p+=GetPixelChannels(image);
+          q+=GetPixelChannels(colorize_image);
+          continue;
+        }
       for (i=0; i < (ssize_t) GetPixelChannels(image); i++)
       {
         PixelChannel
@@ -3098,6 +3110,12 @@ MagickExport Image *FxImage(const Image *image,const char *expression,
       register ssize_t
         i;
 
+      if (GetPixelMask(image,p) != 0)
+        {
+          p+=GetPixelChannels(image);
+          q+=GetPixelChannels(fx_image);
+          continue;
+        }
       for (i=0; i < (ssize_t) GetPixelChannels(image); i++)
       {
         MagickRealType
@@ -3298,6 +3316,12 @@ MagickExport Image *ImplodeImage(const Image *image,const double amount,
       /*
         Determine if the pixel is within an ellipse.
       */
+      if (GetPixelMask(image,p) != 0)
+        {
+          p+=GetPixelChannels(image);
+          q+=GetPixelChannels(implode_image);
+          continue;
+        }
       delta.x=scale.x*(double) (x-center.x);
       distance=delta.x*delta.x+delta.y*delta.y;
       if (distance >= (radius*radius))
@@ -3532,7 +3556,12 @@ MagickExport Image *MorphImages(const Image *image,
           register ssize_t
             i;
 
-          for (i=0; i < (ssize_t) GetPixelChannels(image); i++)
+          if (GetPixelMask(morph_image,p) != 0)
+            {
+              p+=GetPixelChannels(morph_image);
+              continue;
+            }
+          for (i=0; i < (ssize_t) GetPixelChannels(morph_image); i++)
           {
             PixelChannel
               channel;
@@ -4468,6 +4497,11 @@ MagickExport Image *SketchImage(const Image *image,const double radius,
       register ssize_t
         i;
 
+      if (GetPixelMask(random_image,q) != 0)
+        {
+          q+=GetPixelChannels(random_image);
+          continue;
+        }
       value=GetPseudoRandomValue(random_info[id]);
       for (i=0; i < (ssize_t) GetPixelChannels(random_image); i++)
       {
@@ -4629,6 +4663,11 @@ MagickExport MagickBooleanType SolarizeImage(Image *image,
       register ssize_t
         i;
 
+      if (GetPixelMask(image,q) != 0)
+        {
+          q+=GetPixelChannels(image);
+          continue;
+        }
       for (i=0; i < (ssize_t) GetPixelChannels(image); i++)
       {
         PixelChannel
@@ -5129,6 +5168,12 @@ MagickExport Image *SwirlImage(const Image *image,double degrees,
       /*
         Determine if the pixel is within an ellipse.
       */
+      if (GetPixelMask(image,p) != 0)
+        {
+          p+=GetPixelChannels(image);
+          q+=GetPixelChannels(swirl_image);
+          continue;
+        }
       delta.x=scale.x*(double) (x-center.x);
       distance=delta.x*delta.x+delta.y*delta.y;
       if (distance >= (radius*radius))
@@ -5355,6 +5400,12 @@ MagickExport Image *TintImage(const Image *image,const char *blend,
       register ssize_t
         i;
 
+      if (GetPixelMask(image,p) != 0)
+        {
+          p+=GetPixelChannels(image);
+          q+=GetPixelChannels(tint_image);
+          continue;
+        }
       for (i=0; i < (ssize_t) GetPixelChannels(image); i++)
       {
         PixelChannel
index da9bda09509339cb1e56179e6ff9b6f905ca4b5b..ddc5cbe829b591283032d63b578f9a94795ecaca 100644 (file)
@@ -189,7 +189,6 @@ MagickExport Image *AcquireImage(const ImageInfo *image_info,
   image->resolution.y=DefaultResolution;
   image->units=PixelsPerInchResolution;
   GetTimerInfo(&image->timer);
-  image->ping=MagickFalse;
   image->cache=AcquirePixelCache(0);
   image->channel_mask=DefaultChannels;
   image->channel_map=AcquirePixelChannelMap();
@@ -546,6 +545,12 @@ MagickExport Image *AppendImages(const Image *images,
         register ssize_t
           i;
 
+        if (GetPixelMask(image,p) != 0)
+          {
+            p+=GetPixelChannels(image);
+            q+=GetPixelChannels(append_image);
+            continue;
+          }
         for (i=0; i < (ssize_t) GetPixelChannels(image); i++)
         {
           PixelChannel
@@ -723,7 +728,7 @@ MagickExport MagickBooleanType ClipImagePath(Image *image,const char *pathname,
     (void) NegateImage(clip_mask,MagickFalse,exception);
   (void) FormatLocaleString(clip_mask->magick_filename,MaxTextExtent,
     "8BIM:1999,2998:%s\nPS",pathname);
-  (void) SetImageClipMask(image,clip_mask,exception);
+  (void) SetImageMask(image,clip_mask,exception);
   clip_mask=DestroyImage(clip_mask);
   return(MagickTrue);
 }
@@ -798,6 +803,7 @@ MagickExport Image *CloneImage(const Image *image,const size_t columns,
   clone_image->number_meta_channels=image->number_meta_channels;
   clone_image->metacontent_extent=image->metacontent_extent;
   clone_image->colorspace=image->colorspace;
+  clone_image->masky=image->masky;
   clone_image->matte=image->matte;
   clone_image->columns=image->columns;
   clone_image->rows=image->rows;
@@ -837,8 +843,6 @@ MagickExport Image *CloneImage(const Image *image,const size_t columns,
   clone_image->next=image->next;
   clone_image->previous=image->previous;
   clone_image->list=NewImageList();
-  clone_image->clip_mask=NewImageList();
-  clone_image->mask=NewImageList();
   if (detach == MagickFalse)
     clone_image->blob=ReferenceBlob(image->blob);
   else
@@ -856,22 +860,9 @@ MagickExport Image *CloneImage(const Image *image,const size_t columns,
         (void) CloneString(&clone_image->montage,image->montage);
       if (image->directory != (char *) NULL)
         (void) CloneString(&clone_image->directory,image->directory);
-      if (image->clip_mask != (Image *) NULL)
-        clone_image->clip_mask=CloneImage(image->clip_mask,0,0,MagickTrue,
-          exception);
-      if (image->mask != (Image *) NULL)
-        clone_image->mask=CloneImage(image->mask,0,0,MagickTrue,exception);
       clone_image->cache=ReferencePixelCache(image->cache);
       return(clone_image);
     }
-  if ((columns == image->columns) && (rows == image->rows))
-    {
-      if (image->clip_mask != (Image *) NULL)
-        clone_image->clip_mask=CloneImage(image->clip_mask,0,0,MagickTrue,
-          exception);
-      if (image->mask != (Image *) NULL)
-        clone_image->mask=CloneImage(image->mask,0,0,MagickTrue,exception);
-    }
   scale=(MagickRealType) columns/(MagickRealType) image->columns;
   clone_image->page.width=(size_t) floor(scale*image->page.width+0.5);
   clone_image->page.x=(ssize_t) ceil(scale*image->page.x-0.5);
@@ -1190,10 +1181,6 @@ MagickExport Image *DestroyImage(Image *image)
   */
   DestroyImagePixels(image);
   image->channel_map=DestroyPixelChannelMap(image->channel_map);
-  if (image->clip_mask != (Image *) NULL)
-    image->clip_mask=DestroyImage(image->clip_mask);
-  if (image->mask != (Image *) NULL)
-    image->mask=DestroyImage(image->mask);
   if (image->montage != (char *) NULL)
     image->montage=DestroyString(image->montage);
   if (image->directory != (char *) NULL)
@@ -1347,40 +1334,6 @@ MagickExport MagickBooleanType GetImageAlphaChannel(const Image *image)
 %                                                                             %
 %                                                                             %
 %                                                                             %
-%   G e t I m a g e C l i p M a s k                                           %
-%                                                                             %
-%                                                                             %
-%                                                                             %
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-%
-%  GetImageClipMask() returns the clip path associated with the image.
-%
-%  The format of the GetImageClipMask method is:
-%
-%      Image *GetImageClipMask(const Image *image,ExceptionInfo *exception)
-%
-%  A description of each parameter follows:
-%
-%    o image: the image.
-%
-*/
-MagickExport Image *GetImageClipMask(const Image *image,
-  ExceptionInfo *exception)
-{
-  assert(image != (const Image *) NULL);
-  if (image->debug != MagickFalse)
-    (void) LogMagickEvent(TraceEvent,GetMagickModule(),"...");
-  assert(image->signature == MagickSignature);
-  if (image->clip_mask == (Image *) NULL)
-    return((Image *) NULL);
-  return(CloneImage(image->clip_mask,0,0,MagickTrue,exception));
-}
-\f
-/*
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-%                                                                             %
-%                                                                             %
-%                                                                             %
 %   G e t I m a g e I n f o                                                   %
 %                                                                             %
 %                                                                             %
@@ -1486,13 +1439,67 @@ MagickExport FILE *GetImageInfoFile(const ImageInfo *image_info)
 */
 MagickExport Image *GetImageMask(const Image *image,ExceptionInfo *exception)
 {
-  assert(image != (const Image *) NULL);
+  CacheView
+    *mask_view,
+    *image_view;
+
+  Image
+    *mask_image;
+
+  MagickBooleanType
+    status;
+
+  ssize_t
+    y;
+
+  /*
+    Get image mask.
+  */
+  assert(image != (Image *) NULL);
   if (image->debug != MagickFalse)
     (void) LogMagickEvent(TraceEvent,GetMagickModule(),"...");
   assert(image->signature == MagickSignature);
-  if (image->mask == (Image *) NULL)
+  mask_image=CloneImage(image,image->columns,image->rows,MagickTrue,exception);
+  if (mask_image == (Image *) NULL)
     return((Image *) NULL);
-  return(CloneImage(image->mask,0,0,MagickTrue,exception));
+  status=MagickTrue;
+  mask_image->colorspace=GRAYColorspace;
+  mask_image->masky=MagickFalse;
+  image_view=AcquireCacheView(image);
+  mask_view=AcquireCacheView(mask_image);
+  for (y=0; y < (ssize_t) image->rows; y++)
+  {
+    register const Quantum
+      *restrict p;
+
+    register Quantum
+      *restrict q;
+
+    register ssize_t
+      x;
+
+    if (status == MagickFalse)
+      continue;
+    p=GetCacheViewVirtualPixels(image_view,0,y,image->columns,1,exception);
+    q=GetCacheViewAuthenticPixels(mask_view,0,y,mask_image->columns,1,
+      exception);
+    if ((p == (const Quantum *) NULL) || (q == (Quantum *) NULL))
+      {
+        status=MagickFalse;
+        continue;
+      }
+    for (x=0; x < (ssize_t) image->columns; x++)
+    {
+      SetPixelGray(mask_image,GetPixelMask(image,p),q);
+      p+=GetPixelChannels(image);
+      q+=GetPixelChannels(mask_image);
+    }
+    if (SyncCacheViewAuthenticPixels(mask_view,exception) == MagickFalse)
+      status=MagickFalse;
+  }
+  mask_view=DestroyCacheView(mask_view);
+  image_view=DestroyCacheView(image_view);
+  return(mask_image);
 }
 \f
 /*
@@ -1816,6 +1823,11 @@ MagickExport MagickBooleanType IsHighDynamicRangeImage(const Image *image,
       register ssize_t
         i;
 
+      if (GetPixelMask(image,p) != 0)
+        {
+          p+=GetPixelChannels(image);
+          continue;
+        }
       for (i=0; i < (ssize_t) GetPixelChannels(image); i++)
       {
         MagickRealType
@@ -2280,6 +2292,12 @@ MagickExport Image *SeparateImage(const Image *image,
       register ssize_t
         i;
 
+      if (GetPixelMask(image,p) != 0)
+        {
+          p+=GetPixelChannels(image);
+          q+=GetPixelChannels(separate_image);
+          continue;
+        }
       SetPixelChannel(separate_image,GrayPixelChannel,0,q);
       for (i=0; i < (ssize_t) GetPixelChannels(image); i++)
       {
@@ -2288,7 +2306,7 @@ MagickExport Image *SeparateImage(const Image *image,
 
         PixelTrait
           traits;
-       
+
         channel=GetPixelChannelMapChannel(image,i);
         traits=GetPixelChannelMapTraits(image,channel);
         if ((traits == UndefinedPixelTrait) ||
@@ -2840,60 +2858,6 @@ MagickExport MagickBooleanType SetImageStorageClass(Image *image,
 %                                                                             %
 %                                                                             %
 %                                                                             %
-%   S e t I m a g e C l i p M a s k                                           %
-%                                                                             %
-%                                                                             %
-%                                                                             %
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-%
-%  SetImageClipMask() associates a clip path with the image.  The clip path
-%  must be the same dimensions as the image.  Set any pixel component of
-%  the clip path to TransparentAlpha to prevent that corresponding image
-%  pixel component from being updated when SyncAuthenticPixels() is applied.
-%
-%  The format of the SetImageClipMask method is:
-%
-%      MagickBooleanType SetImageClipMask(Image *image,const Image *clip_mask,
-%        ExceptionInfo *exception)
-%
-%  A description of each parameter follows:
-%
-%    o image: the image.
-%
-%    o clip_mask: the image clip mask,  NULL undefines.
-%
-%    o exception: return any errors or warnings in this structure.
-%
-*/
-MagickExport MagickBooleanType SetImageClipMask(Image *image,
-  const Image *clip_mask,ExceptionInfo *exception)
-{
-  assert(image != (Image *) NULL);
-  if (image->debug != MagickFalse)
-    (void) LogMagickEvent(TraceEvent,GetMagickModule(),"...");
-  assert(image->signature == MagickSignature);
-  if (clip_mask != (const Image *) NULL)
-    if ((clip_mask->columns != image->columns) ||
-        (clip_mask->rows != image->rows))
-      ThrowBinaryException(ImageError,"ImageSizeDiffers",image->filename);
-  if (image->clip_mask != (Image *) NULL)
-    image->clip_mask=DestroyImage(image->clip_mask);
-  image->clip_mask=NewImageList();
-  if (clip_mask == (Image *) NULL)
-    return(MagickTrue);
-  if (SetImageStorageClass(image,DirectClass,exception) == MagickFalse)
-    return(MagickFalse);
-  image->clip_mask=CloneImage(clip_mask,0,0,MagickTrue,exception);
-  if (image->clip_mask == (Image *) NULL)
-    return(MagickFalse);
-  return(MagickTrue);
-}
-\f
-/*
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-%                                                                             %
-%                                                                             %
-%                                                                             %
 %   S e t I m a g e E x t e n t                                               %
 %                                                                             %
 %                                                                             %
@@ -3367,27 +3331,69 @@ MagickExport void SetImageInfoFile(ImageInfo *image_info,FILE *file)
 %    o exception: return any errors or warnings in this structure.
 %
 */
-MagickExport MagickBooleanType SetImageMask(Image *image,
-  const Image *mask,ExceptionInfo *exception)
+MagickExport MagickBooleanType SetImageMask(Image *image,const Image *mask,
+  ExceptionInfo *exception)
 {
+  CacheView
+    *mask_view,
+    *image_view;
+
+  MagickBooleanType
+    status;
+
+  ssize_t
+    y;
+
+  /*
+    Set image mask.
+  */
   assert(image != (Image *) NULL);
   if (image->debug != MagickFalse)
     (void) LogMagickEvent(TraceEvent,GetMagickModule(),"...");
   assert(image->signature == MagickSignature);
-  if (mask != (const Image *) NULL)
-    if ((mask->columns != image->columns) || (mask->rows != image->rows))
-      ThrowBinaryException(ImageError,"ImageSizeDiffers",image->filename);
-  if (image->mask != (Image *) NULL)
-    image->mask=DestroyImage(image->mask);
-  image->mask=NewImageList();
-  if (mask == (Image *) NULL)
-    return(MagickTrue);
-  if (SetImageStorageClass(image,DirectClass,exception) == MagickFalse)
-    return(MagickFalse);
-  image->mask=CloneImage(mask,0,0,MagickTrue,exception);
-  if (image->mask == (Image *) NULL)
-    return(MagickFalse);
-  return(MagickTrue);
+  if (mask == (const Image *) NULL)
+    {
+      image->masky=MagickFalse;
+      return(MagickTrue);
+    }
+  if ((mask->columns != image->columns) || (mask->rows != image->rows))
+    ThrowBinaryException(ImageError,"ImageSizeDiffers",image->filename);
+  status=MagickTrue;
+  image->masky=MagickTrue;
+  image_view=AcquireCacheView(image);
+  mask_view=AcquireCacheView(mask);
+  for (y=0; y < (ssize_t) image->rows; y++)
+  {
+    register const Quantum
+      *restrict p;
+
+    register Quantum
+      *restrict q;
+
+    register ssize_t
+      x;
+
+    if (status == MagickFalse)
+      continue;
+    p=GetCacheViewVirtualPixels(mask_view,0,y,mask->columns,1,exception);
+    q=GetCacheViewAuthenticPixels(image_view,0,y,image->columns,1,exception);
+    if ((p == (const Quantum *) NULL) || (q == (Quantum *) NULL))
+      {
+        status=MagickFalse;
+        continue;
+      }
+    for (x=0; x < (ssize_t) image->columns; x++)
+    {
+      SetPixelMask(image,GetPixelGray(mask,p),q);
+      p+=GetPixelChannels(mask);
+      q+=GetPixelChannels(image);
+    }
+    if (SyncCacheViewAuthenticPixels(image_view,exception) == MagickFalse)
+      status=MagickFalse;
+  }
+  mask_view=DestroyCacheView(mask_view);
+  image_view=DestroyCacheView(image_view);
+  return(status);
 }
 \f
 /*
index d4403b8bb298c319fe3dee3998144dfec722ebfa..5fdd1bcadc9ba850ba4ad99789eab2124a93ad58 100644 (file)
@@ -233,9 +233,6 @@ struct _Image
   DisposeType
     dispose;        /* GIF animation disposal method */
 
-  struct _Image
-    *clip_mask;
-
   size_t
     scene,          /* index of image in multi-image file */
     delay;          /* Animation delay time */
@@ -256,9 +253,6 @@ struct _Image
   MagickBooleanType
     black_point_compensation;
 
-  struct _Image
-    *mask;
-
   RectangleInfo
     tile_offset;
 
@@ -278,6 +272,9 @@ struct _Image
   MagickBooleanType
     ping;
 
+  MagickBooleanType
+    masky;
+
   size_t
     number_channels,
     number_meta_channels,
@@ -520,7 +517,6 @@ extern MagickExport MagickBooleanType
   SetImageAlpha(Image *,const Quantum,ExceptionInfo *),
   SetImageAlphaChannel(Image *,const AlphaChannelType,ExceptionInfo *),
   SetImageBackgroundColor(Image *,ExceptionInfo *),
-  SetImageClipMask(Image *,const Image *,ExceptionInfo *),
   SetImageColor(Image *,const PixelInfo *,ExceptionInfo *),
   SetImageExtent(Image *,const size_t,const size_t,ExceptionInfo *),
   SetImageInfo(ImageInfo *,const unsigned int,ExceptionInfo *),
index 3db76f669fa1b245134c683f8140bc5fe0ec78a2..df87e50c30bd3cc7ff7f4f79a274cac04b5dfd05 100644 (file)
@@ -12,7 +12,9 @@
 /* #undef AUTOTRACE_DELEGATE */
 
 /* Define if coders and filters are to be built as modules. */
-/* #undef BUILD_MODULES */
+#ifndef MAGICKCORE_BUILD_MODULES
+#define MAGICKCORE_BUILD_MODULES 1
+#endif
 
 /* Define if you have the bzip2 library */
 #ifndef MAGICKCORE_BZLIB_DELEGATE
@@ -95,7 +97,9 @@
 #endif
 
 /* Define if you have FlashPIX library */
-/* #undef FPX_DELEGATE */
+#ifndef MAGICKCORE_FPX_DELEGATE
+#define MAGICKCORE_FPX_DELEGATE 1
+#endif
 
 /* Define if you have FreeType (TrueType font) library */
 #ifndef MAGICKCORE_FREETYPE_DELEGATE
 #endif
 
 /* Define to 1 if you have the <CL/cl.h> header file. */
-/* #undef HAVE_CL_CL_H */
+#ifndef MAGICKCORE_HAVE_CL_CL_H
+#define MAGICKCORE_HAVE_CL_CL_H 1
+#endif
 
 /* Define to 1 if you have the <complex.h> header file. */
 #ifndef MAGICKCORE_HAVE_COMPLEX_H
 #endif
 
 /* Define if you have the <lcms2.h> header file. */
-#ifndef MAGICKCORE_HAVE_LCMS2_H
-#define MAGICKCORE_HAVE_LCMS2_H 1
-#endif
+/* #undef HAVE_LCMS2_H */
 
 /* Define if you have the <lcms2/lcms2.h> header file. */
 /* #undef HAVE_LCMS2_LCMS2_H */
 
 /* Define if you have the <lcms.h> header file. */
-/* #undef HAVE_LCMS_H */
+#ifndef MAGICKCORE_HAVE_LCMS_H
+#define MAGICKCORE_HAVE_LCMS_H 1
+#endif
 
 /* Define if you have the <lcms/lcms.h> header file. */
 /* #undef HAVE_LCMS_LCMS_H */
 #endif
 
 /* Define if you have JBIG library */
-/* #undef JBIG_DELEGATE */
+#ifndef MAGICKCORE_JBIG_DELEGATE
+#define MAGICKCORE_JBIG_DELEGATE 1
+#endif
 
 /* Define if you have JPEG version 2 "Jasper" library */
 #ifndef MAGICKCORE_JP2_DELEGATE
 #endif
 
 /* Define if you have LQR library */
-/* #undef LQR_DELEGATE */
+#ifndef MAGICKCORE_LQR_DELEGATE
+#define MAGICKCORE_LQR_DELEGATE 1
+#endif
 
 /* Define if using libltdl to support dynamically loadable modules */
 #ifndef MAGICKCORE_LTDL_DELEGATE
 
 /* Define to the system default library search path. */
 #ifndef MAGICKCORE_LT_DLSEARCH_PATH
-#define MAGICKCORE_LT_DLSEARCH_PATH "/lib64:/usr/lib64:/lib:/usr/lib:/usr/lib64/atlas:/usr/lib/llvm:/usr/lib64/llvm:/usr/local/lib:/usr/lib64/mysql:/usr/lib64/qt-3.3/lib:/usr/lib64/tcl8.5/tclx8.4:/usr/lib64/tcl8.5:/usr/lib64/tracker-0.12:/usr/lib/wine/:/usr/lib64/wine/:/usr/lib64/xulrunner-2"
+#define MAGICKCORE_LT_DLSEARCH_PATH "/lib64:/usr/lib64:/lib:/usr/lib:/usr/lib64/R/lib:/usr/lib64/atlas:/usr/lib64/freetype-freeworld:/opt/modules/pkg/intel/f77/10.0.025/lib:/opt/intel/lib/intel64:/usr/lib/llvm:/usr/lib64/llvm:/usr/local/lib:/usr/lib64/mysql:/usr/lib64/nvidia:/usr/lib64/openmotif:/usr/lib64/qt-3.3/lib:/usr/lib64/tracker-0.12:/usr/lib64/xulrunner-2"
 #endif
 
 /* The archive extension */
 /* #undef NO_MINUS_C_MINUS_O */
 
 /* Define if you have OPENEXR library */
-/* #undef OPENEXR_DELEGATE */
+#ifndef MAGICKCORE_OPENEXR_DELEGATE
+#define MAGICKCORE_OPENEXR_DELEGATE 1
+#endif
 
 /* Name of package */
 #ifndef MAGICKCORE_PACKAGE
 #endif
 
 /* Define if you have WEBP library */
-/* #undef WEBP_DELEGATE */
+#ifndef MAGICKCORE_WEBP_DELEGATE
+#define MAGICKCORE_WEBP_DELEGATE 1
+#endif
 
 /* Define to use the Windows GDI32 library */
 /* #undef WINGDI32_DELEGATE */
 /* #undef _MINIX */
 
 /* Define this for the OpenCL Accelerator */
-/* #undef _OPENCL */
+#ifndef MAGICKCORE__OPENCL
+#define MAGICKCORE__OPENCL 1
+#endif
 
 /* Define to 2 if the system does not provide POSIX.1 features except with
    this defined. */
index 27c60d23ce12691eaa09a6bd046c953bcfec9877..db11cb9de76bf796f68dfbf0542834b1704cb1a9 100644 (file)
@@ -653,6 +653,12 @@ MagickExport Image *OilPaintImage(const Image *image,const double radius,
         }
         k+=(ssize_t) (image->columns+width);
       }
+      if (GetPixelMask(image,p) != 0)
+        {
+          p+=GetPixelChannels(image);
+          q+=GetPixelChannels(paint_image);
+          continue;
+        }
       for (i=0; i < (ssize_t) GetPixelChannels(image); i++)
       {
         PixelChannel
index c5f4bcb3680c0eb21e660fcf483e90dbf1ca5569..4e64e45f82516244442ba8df4300415f40f8d0fe 100644 (file)
@@ -246,6 +246,19 @@ static inline PixelTrait GetPixelMagentaTraits(const Image *restrict image)
   return(image->channel_map[MagentaPixelChannel].traits);
 }
 
+static inline Quantum GetPixelMask(const Image *restrict image,
+  const Quantum *restrict pixel)
+{
+  if (image->channel_map[MaskPixelChannel].traits == UndefinedPixelTrait)
+    return(0);
+  return(pixel[image->channel_map[MaskPixelChannel].offset]);
+}
+
+static inline PixelTrait GetPixelMaskTraits(const Image *restrict image)
+{
+  return(image->channel_map[MaskPixelChannel].traits);
+}
+
 static inline size_t GetPixelMetaChannels(const Image *restrict image)
 {
   return(image->number_meta_channels);
@@ -630,6 +643,13 @@ static inline void SetPixelMagentaTraits(Image *image,const PixelTrait traits)
   image->channel_map[MagentaPixelChannel].traits=traits;
 }
 
+static inline void SetPixelMask(const Image *restrict image,
+  const Quantum mask,Quantum *restrict pixel)
+{
+  if (image->channel_map[MaskPixelChannel].traits != UndefinedPixelTrait)
+    pixel[image->channel_map[MaskPixelChannel].offset]=mask;
+}
+
 static inline void SetPixelMetaChannels(Image *image,
   const size_t number_meta_channels)
 {
index 00a73d4bdd1ba0dd8305b426f54732c7fa4cb449..6b99c6b73feb96d0ccba19d5c6ab8c99244bcebd 100644 (file)
@@ -3922,6 +3922,8 @@ MagickExport void InitializePixelChannelMap(Image *image)
     SetPixelChannelMap(image,AlphaPixelChannel,CopyPixelTrait,n++);
   if (image->storage_class == PseudoClass)
     SetPixelChannelMap(image,IndexPixelChannel,CopyPixelTrait,n++);
+  if (image->masky != MagickFalse)
+    SetPixelChannelMap(image,MaskPixelChannel,CopyPixelTrait,n++);
   assert((n+image->number_meta_channels) < MaxPixelChannels);
   for (i=0; i < (ssize_t) image->number_meta_channels; i++)
     SetPixelChannelMap(image,(PixelChannel) (MetaPixelChannel+i),CopyPixelTrait,
@@ -5666,6 +5668,8 @@ MagickExport void SetPixelChannelMapMask(Image *image,
   }
   if (image->storage_class == PseudoClass)
     SetPixelChannelMapTraits(image,IndexPixelChannel,CopyPixelTrait);
+  if (image->masky != MagickFalse)
+    SetPixelChannelMapTraits(image,MaskPixelChannel,CopyPixelTrait);
   if (image->debug != MagickFalse)
     LogPixelChannels(image);
 }
index 1f307ebb6b6308286126456a0ce62ee396c518a7..f8141166cd753ba87adeaf5d21291871ba46ad09 100644 (file)
@@ -3237,6 +3237,11 @@ MagickExport size_t ExportQuantumPixels(const Image *image,
         register ssize_t
           i;
 
+        if (GetPixelMask(image,q) != 0)
+          {
+            q+=GetPixelChannels(image);
+            continue;
+          }
         Sa=QuantumScale*GetPixelAlpha(image,q);
         for (i=0; i < (ssize_t) GetPixelChannels(image); i++)
         {
index 39a592399d7d5d5519287415b0ec6810121956ec..f9d311fb1ff2b055693707dfbe3fe2304ba8a08f 100644 (file)
@@ -3603,6 +3603,11 @@ MagickExport size_t ImportQuantumPixels(const Image *image,
         register ssize_t
           i;
 
+        if (GetPixelMask(image,q) != 0)
+          {
+            q+=GetPixelChannels(image);
+            continue;
+          }
         Sa=QuantumScale*GetPixelAlpha(image,q);
         gamma=1.0/(fabs(Sa) <= MagickEpsilon ? 1.0 : Sa);
         for (i=0; i < (ssize_t) GetPixelChannels(image); i++)
index 358e573aeda4d9e0107dd2e5a7b08a82ad785141..1f665fe7c4a73a560477539a6c299a1118ad91fc 100644 (file)
@@ -1604,7 +1604,12 @@ MagickExport Image *InterpolativeResizeImage(const Image *image,
       register ssize_t
         i;
 
-      for (i=0; i < (ssize_t) GetPixelChannels(image); i++)
+      if (GetPixelMask(resize_image,q) != 0)
+        {
+          q+=GetPixelChannels(resize_image);
+          continue;
+        }
+      for (i=0; i < (ssize_t) GetPixelChannels(resize_image); i++)
       {
         PixelChannel
           channel;
@@ -2249,7 +2254,12 @@ static MagickBooleanType HorizontalFilter(const ResizeFilter *resize_filter,
       register ssize_t
         i;
 
-      for (i=0; i < (ssize_t) GetPixelChannels(image); i++)
+      if (GetPixelMask(resize_image,q) != 0)
+        {
+          q+=GetPixelChannels(resize_image);
+          continue;
+        }
+      for (i=0; i < (ssize_t) GetPixelChannels(resize_image); i++)
       {
         MagickRealType
           alpha,
@@ -2462,7 +2472,12 @@ static MagickBooleanType VerticalFilter(const ResizeFilter *resize_filter,
       register ssize_t
         i;
 
-      for (i=0; i < (ssize_t) GetPixelChannels(image); i++)
+      if (GetPixelMask(resize_image,q) != 0)
+        {
+          q+=GetPixelChannels(resize_image);
+          continue;
+        }
+      for (i=0; i < (ssize_t) GetPixelChannels(resize_image); i++)
       {
         MagickRealType
           alpha,
@@ -2783,7 +2798,12 @@ MagickExport Image *SampleImage(const Image *image,const size_t columns,
       register ssize_t
         i;
 
-      for (i=0; i < (ssize_t) GetPixelChannels(image); i++)
+      if (GetPixelMask(sample_image,q) != 0)
+        {
+          q+=GetPixelChannels(sample_image);
+          continue;
+        }
+      for (i=0; i < (ssize_t) GetPixelChannels(sample_image); i++)
       {
         PixelChannel
           channel;
@@ -2980,6 +3000,11 @@ MagickExport Image *ScaleImage(const Image *image,const size_t columns,
           break;
         for (x=0; x < (ssize_t) image->columns; x++)
         {
+          if (GetPixelMask(image,p) != 0)
+            {
+              p+=GetPixelChannels(image);
+              continue;
+            }
           for (i=0; i < (ssize_t) GetPixelChannels(image); i++)
           {
             PixelChannel
@@ -3020,6 +3045,11 @@ MagickExport Image *ScaleImage(const Image *image,const size_t columns,
                 break;
               for (x=0; x < (ssize_t) image->columns; x++)
               {
+                if (GetPixelMask(image,p) != 0)
+                  {
+                    p+=GetPixelChannels(image);
+                    continue;
+                  }
                 for (i=0; i < (ssize_t) GetPixelChannels(image); i++)
                 {
                   PixelChannel
@@ -3062,6 +3092,11 @@ MagickExport Image *ScaleImage(const Image *image,const size_t columns,
               break;
             for (x=0; x < (ssize_t) image->columns; x++)
             {
+              if (GetPixelMask(image,p) != 0)
+                {
+                  p+=GetPixelChannels(image);
+                  continue;
+                }
               for (i=0; i < (ssize_t) GetPixelChannels(image); i++)
               {
                 PixelChannel
@@ -3111,6 +3146,11 @@ MagickExport Image *ScaleImage(const Image *image,const size_t columns,
         */
         for (x=0; x < (ssize_t) scale_image->columns; x++)
         {
+          if (GetPixelMask(scale_image,q) != 0)
+            {
+              q+=GetPixelChannels(scale_image);
+              continue;
+            }
           for (i=0; i < (ssize_t) GetPixelChannels(scale_image); i++)
           {
             ssize_t
@@ -3212,6 +3252,11 @@ MagickExport Image *ScaleImage(const Image *image,const size_t columns,
       */
       for (x=0; x < (ssize_t) scale_image->columns; x++)
       {
+        if (GetPixelMask(scale_image,q) != 0)
+          {
+            q+=GetPixelChannels(scale_image);
+            continue;
+          }
         for (i=0; i < (ssize_t) GetPixelChannels(scale_image); i++)
         {
           channel=GetPixelChannelMapChannel(scale_image,i);
index 43bfe5854d24209a0e93f9d68f25103dcfe51f17..c22e8aaa910fbbd8327c547065059e38ea308395 100644 (file)
@@ -1087,6 +1087,12 @@ MagickExport Image *IntegralRotateImage(const Image *image,size_t rotations,
               register ssize_t
                 i;
 
+              if (GetPixelMask(image,tile_pixels) != 0)
+                {
+                  tile_pixels-=width*GetPixelChannels(image);
+                  q+=GetPixelChannels(rotate_image);
+                  continue;
+                }
               for (i=0; i < (ssize_t) GetPixelChannels(image); i++)
               {
                 PixelChannel
@@ -1173,6 +1179,11 @@ MagickExport Image *IntegralRotateImage(const Image *image,size_t rotations,
             i;
 
           q-=GetPixelChannels(rotate_image);
+          if (GetPixelMask(image,p) != 0)
+            {
+              p+=GetPixelChannels(image);
+              continue;
+            }
           for (i=0; i < (ssize_t) GetPixelChannels(image); i++)
           {
             PixelChannel
@@ -1295,6 +1306,12 @@ MagickExport Image *IntegralRotateImage(const Image *image,size_t rotations,
               register ssize_t
                 i;
 
+              if (GetPixelMask(image,tile_pixels) != 0)
+                {
+                  tile_pixels+=width*GetPixelChannels(image);
+                  q+=GetPixelChannels(rotate_image);
+                  continue;
+                }
               for (i=0; i < (ssize_t) GetPixelChannels(image); i++)
               {
                 PixelChannel
index e4452902318066ea37b125c382b13740d458f725..4489d4391122e8809e0ba077eced5d469dcf6be1 100644 (file)
@@ -524,6 +524,11 @@ MagickExport MagickBooleanType SignatureImage(Image *image,
       register ssize_t
         i;
 
+      if (GetPixelMask(image,p) != 0)
+        {
+          p+=GetPixelChannels(image);
+          continue;
+        }
       for (i=0; i < (ssize_t) GetPixelChannels(image); i++)
       {
         PixelChannel
index a06f38bf5626c1b2f056ddfde899d8963fa26809..b9c7150d2211b410cf1aadca44b20a863f3a8e4f 100644 (file)
@@ -659,7 +659,12 @@ MagickExport Image *EvaluateImages(const Image *images,
             register ssize_t
               i;
 
-            for (i=0; i < (ssize_t) GetPixelChannels(evaluate_image); i++)
+            if (GetPixelMask(evaluate_image,p) != 0)
+              {
+                p+=GetPixelChannels(evaluate_image);
+                continue;
+              }
+            for (i=0; i < (ssize_t) GetPixelChannels(next); i++)
             {
               PixelChannel
                 channel;
@@ -719,6 +724,11 @@ MagickExport Image *EvaluateImages(const Image *images,
           register ssize_t
             i;
 
+          if (GetPixelMask(evaluate_image,q) != 0)
+            {
+              q+=GetPixelChannels(evaluate_image);
+              continue;
+            }
           for (i=0; i < (ssize_t) GetPixelChannels(evaluate_image); i++)
           {
             PixelChannel
@@ -819,6 +829,11 @@ MagickExport MagickBooleanType EvaluateImage(Image *image,
       register ssize_t
         i;
 
+      if (GetPixelMask(image,q) != 0)
+        {
+          q+=GetPixelChannels(image);
+          continue;
+        }
       for (i=0; i < (ssize_t) GetPixelChannels(image); i++)
       {
         PixelChannel
@@ -1041,6 +1056,11 @@ MagickExport MagickBooleanType FunctionImage(Image *image,
       register ssize_t
         i;
 
+      if (GetPixelMask(image,q) != 0)
+        {
+          q+=GetPixelChannels(image);
+          continue;
+        }
       for (i=0; i < (ssize_t) GetPixelChannels(image); i++)
       {
         PixelChannel
@@ -1299,6 +1319,11 @@ MagickExport MagickBooleanType GetImageKurtosis(const Image *image,
       register ssize_t
         i;
 
+      if (GetPixelMask(image,p) != 0)
+        {
+          p+=GetPixelChannels(image);
+          continue;
+        }
       for (i=0; i < (ssize_t) GetPixelChannels(image); i++)
       {
         PixelChannel
@@ -1422,6 +1447,11 @@ MagickExport MagickBooleanType GetImageRange(const Image *image,double *minima,
       register ssize_t
         i;
 
+      if (GetPixelMask(image,p) != 0)
+        {
+          p+=GetPixelChannels(image);
+          continue;
+        }
       for (i=0; i < (ssize_t) GetPixelChannels(image); i++)
       {
         PixelChannel
@@ -1569,6 +1599,11 @@ MagickExport ChannelStatistics *GetImageStatistics(const Image *image,
       register ssize_t
         i;
 
+      if (GetPixelMask(image,p) != 0)
+        {
+          p+=GetPixelChannels(image);
+          continue;
+        }
       for (i=0; i < (ssize_t) GetPixelChannels(image); i++)
       {
         PixelChannel
@@ -2242,6 +2277,12 @@ MagickExport Image *StatisticImage(const Image *image,const StatisticType type,
       register ssize_t
         i;
 
+      if (GetPixelMask(image,p) != 0)
+        {
+          p+=GetPixelChannels(image);
+          q+=GetPixelChannels(statistic_image);
+          continue;
+        }
       for (i=0; i < (ssize_t) GetPixelChannels(image); i++)
       {
         PixelChannel
index af85140139b1b3e50420c68091aa1508e1566021..535559c1df13e2a9d095878fe70bc6090bce4ed7 100644 (file)
@@ -238,6 +238,12 @@ MagickExport Image *AdaptiveThresholdImage(const Image *image,
       register ssize_t
         i;
 
+      if (GetPixelMask(image,p) != 0)
+        {
+          p+=GetPixelChannels(image);
+          q+=GetPixelChannels(threshold_image);
+          continue;
+        }
       for (i=0; i < (ssize_t) GetPixelChannels(image); i++)
       {
         MagickRealType
@@ -407,6 +413,11 @@ MagickExport MagickBooleanType BilevelImage(Image *image,const double threshold,
       register ssize_t
         i;
 
+      if (GetPixelMask(image,q) != 0)
+        {
+          q+=GetPixelChannels(image);
+          continue;
+        }
       for (i=0; i < (ssize_t) GetPixelChannels(image); i++)
       {
         PixelChannel
@@ -557,6 +568,11 @@ MagickExport MagickBooleanType BlackThresholdImage(Image *image,
         n;
 
       n=0;
+      if (GetPixelMask(image,q) != 0)
+        {
+          q+=GetPixelChannels(image);
+          continue;
+        }
       for (i=0; i < (ssize_t) GetPixelChannels(image); i++)
       {
         PixelChannel
@@ -701,6 +717,11 @@ MagickExport MagickBooleanType ClampImage(Image *image,ExceptionInfo *exception)
       register ssize_t
         i;
 
+      if (GetPixelMask(image,q) != 0)
+        {
+          q+=GetPixelChannels(image);
+          continue;
+        }
       for (i=0; i < (ssize_t) GetPixelChannels(image); i++)
       {
         PixelChannel
@@ -1323,6 +1344,11 @@ MagickExport MagickBooleanType OrderedPosterizeImage(Image *image,
         n;
 
       n=0;
+      if (GetPixelMask(image,q) != 0)
+        {
+          q+=GetPixelChannels(image);
+          continue;
+        }
       for (i=0; i < (ssize_t) GetPixelChannels(image); i++)
       {
         PixelChannel
@@ -1491,6 +1517,11 @@ MagickExport MagickBooleanType RandomThresholdImage(Image *image,
       register ssize_t
         i;
 
+      if (GetPixelMask(image,q) != 0)
+        {
+          q+=GetPixelChannels(image);
+          continue;
+        }
       for (i=0; i < (ssize_t) GetPixelChannels(image); i++)
       {
         MagickRealType
@@ -1654,6 +1685,11 @@ MagickExport MagickBooleanType WhiteThresholdImage(Image *image,
         n;
 
       n=0;
+      if (GetPixelMask(image,q) != 0)
+        {
+          q+=GetPixelChannels(image);
+          continue;
+        }
       for (i=0; i < (ssize_t) GetPixelChannels(image); i++)
       {
         PixelChannel
index ec327c8920def850c70fd4e9ffa973fbfef5986d..fa99fce761d2531824d37ed290ad21d9dcad7921 100644 (file)
@@ -190,6 +190,11 @@ MagickExport Image *ChopImage(const Image *image,const RectangleInfo *chop_info,
           register ssize_t
             i;
 
+          if (GetPixelMask(image,p) != 0)
+            {
+              q+=GetPixelChannels(chop_image);
+              continue;
+            }
           for (i=0; i < (ssize_t) GetPixelChannels(image); i++)
           {
             PixelChannel
@@ -261,6 +266,12 @@ MagickExport Image *ChopImage(const Image *image,const RectangleInfo *chop_info,
           register ssize_t
             i;
 
+         if (GetPixelMask(image,p) != 0)
+           {
+             p+=GetPixelChannels(image);
+             q+=GetPixelChannels(chop_image);
+             continue;
+           }
           for (i=0; i < (ssize_t) GetPixelChannels(image); i++)
           {
             PixelChannel
@@ -278,6 +289,7 @@ MagickExport Image *ChopImage(const Image *image,const RectangleInfo *chop_info,
               continue;
             SetPixelChannel(chop_image,channel,p[i],q);
           }
+          p+=GetPixelChannels(chop_image);
           q+=GetPixelChannels(chop_image);
         }
       p+=GetPixelChannels(image);
@@ -614,6 +626,12 @@ MagickExport Image *CropImage(const Image *image,const RectangleInfo *geometry,
       register ssize_t
         i;
 
+      if (GetPixelMask(image,p) != 0)
+        {
+          p+=GetPixelChannels(image);
+          q+=GetPixelChannels(crop_image);
+          continue;
+        }
       for (i=0; i < (ssize_t) GetPixelChannels(image); i++)
       {
         PixelChannel
@@ -968,6 +986,12 @@ MagickExport Image *ExcerptImage(const Image *image,
       register ssize_t
         i;
 
+      if (GetPixelMask(image,p) != 0)
+        {
+          p+=GetPixelChannels(image);
+          q+=GetPixelChannels(excerpt_image);
+          continue;
+        }
       for (i=0; i < (ssize_t) GetPixelChannels(image); i++)
       {
         PixelChannel
@@ -1168,6 +1192,12 @@ MagickExport Image *FlipImage(const Image *image,ExceptionInfo *exception)
       register ssize_t
         i;
 
+      if (GetPixelMask(image,p) != 0)
+        {
+          p+=GetPixelChannels(image);
+          q+=GetPixelChannels(flip_image);
+          continue;
+        }
       for (i=0; i < (ssize_t) GetPixelChannels(image); i++)
       {
         PixelChannel
@@ -1310,6 +1340,11 @@ MagickExport Image *FlopImage(const Image *image,ExceptionInfo *exception)
         i;
 
       q-=GetPixelChannels(flop_image);
+      if (GetPixelMask(image,p) != 0)
+        {
+          p+=GetPixelChannels(image);
+          continue;
+        }
       for (i=0; i < (ssize_t) GetPixelChannels(image); i++)
       {
         PixelChannel
@@ -1437,6 +1472,12 @@ static inline MagickBooleanType CopyImageRegion(Image *destination,
       register ssize_t
         i;
 
+      if (GetPixelMask(source,p) != 0)
+        {
+          p+=GetPixelChannels(source);
+          q+=GetPixelChannels(destination);
+          continue;
+        }
       for (i=0; i < (ssize_t) GetPixelChannels(source); i++)
       {
         PixelChannel
@@ -1755,6 +1796,12 @@ MagickExport Image *SpliceImage(const Image *image,
       register ssize_t
         i;
 
+      if (GetPixelMask(image,p) != 0)
+        {
+          p+=GetPixelChannels(image);
+          q+=GetPixelChannels(splice_image);
+          continue;
+        }
       for (i=0; i < (ssize_t) GetPixelChannels(image); i++)
       {
         PixelChannel
@@ -1782,6 +1829,12 @@ MagickExport Image *SpliceImage(const Image *image,
       register ssize_t
         i;
 
+      if (GetPixelMask(image,p) != 0)
+        {
+          p+=GetPixelChannels(image);
+          q+=GetPixelChannels(splice_image);
+          continue;
+        }
       for (i=0; i < (ssize_t) GetPixelChannels(image); i++)
       {
         PixelChannel
@@ -1851,6 +1904,12 @@ MagickExport Image *SpliceImage(const Image *image,
       register ssize_t
         i;
 
+      if (GetPixelMask(image,q) != 0)
+        {
+          p+=GetPixelChannels(image);
+          q+=GetPixelChannels(splice_image);
+          continue;
+        }
       for (i=0; i < (ssize_t) GetPixelChannels(image); i++)
       {
         PixelChannel
@@ -1878,6 +1937,12 @@ MagickExport Image *SpliceImage(const Image *image,
       register ssize_t
         i;
 
+      if (GetPixelMask(image,q) != 0)
+        {
+          p+=GetPixelChannels(image);
+          q+=GetPixelChannels(splice_image);
+          continue;
+        }
       for (i=0; i < (ssize_t) GetPixelChannels(image); i++)
       {
         PixelChannel
@@ -2187,6 +2252,12 @@ MagickExport Image *TransposeImage(const Image *image,ExceptionInfo *exception)
       register ssize_t
         i;
 
+      if (GetPixelMask(image,q) != 0)
+        {
+          p+=GetPixelChannels(image);
+          q+=GetPixelChannels(transpose_image);
+          continue;
+        }
       for (i=0; i < (ssize_t) GetPixelChannels(image); i++)
       {
         PixelChannel
@@ -2334,6 +2405,11 @@ MagickExport Image *TransverseImage(const Image *image,ExceptionInfo *exception)
         i;
 
       q-=GetPixelChannels(transverse_image);
+      if (GetPixelMask(image,p) != 0)
+        {
+          p+=GetPixelChannels(image);
+          continue;
+        }
       for (i=0; i < (ssize_t) GetPixelChannels(image); i++)
       {
         PixelChannel
index 718cdea6d123601415f207f04d927fef26d17422..c01b83d52c6814d6f5bc35f47dfd588dc2c79769 100644 (file)
@@ -27,14 +27,14 @@ extern "C" {
 */
 #define MagickPackageName "ImageMagick"
 #define MagickCopyright  "Copyright (C) 1999-2012 ImageMagick Studio LLC"
-#define MagickSVNRevision  "6592"
+#define MagickSVNRevision  "exported"
 #define MagickLibVersion  0x700
 #define MagickLibVersionText  "7.0.0"
 #define MagickLibVersionNumber  7,0,0
 #define MagickLibAddendum  "-0"
 #define MagickLibInterface  7
 #define MagickLibMinInterface  7
-#define MagickReleaseDate  "2012-01-25"
+#define MagickReleaseDate  "2012-01-29"
 #define MagickChangeDate   "20110801"
 #define MagickAuthoritativeURL  "http://www.imagemagick.org"
 #if defined(MAGICKCORE_OPENMP_SUPPORT)
index b6d4886135ea5e6872dc5791e9e5674853ce61b6..4649c305462deaa31e735761a52d4bd356492b6d 100644 (file)
@@ -1647,8 +1647,8 @@ WandExport MagickBooleanType CompositeImageCommand(ImageInfo *image_info,
           /*
             Set a blending mask for the composition.
           */
-          images->mask=mask_image;
-          (void) NegateImage(images->mask,MagickFalse,exception);
+          (void) NegateImage(mask_image,MagickFalse,exception);
+          (void) SetImageMask(image,mask_image,exception);
         }
     }
   status&=CompositeImageList(image_info,&images,composite_image,
index caaaedaeb78545e4e6aa940198c027126483b66e..661a840c3c87ab566be96ed7ced9733c00b9512c 100644 (file)
@@ -6737,7 +6737,7 @@ WandExport MagickBooleanType PopDrawingWand(DrawingWand *wand)
   if (CurrentContext->clip_mask != (char *) NULL)
     if (LocaleCompare(CurrentContext->clip_mask,
         wand->graphic_context[wand->index-1]->clip_mask) != 0)
-      (void) SetImageClipMask(wand->image,(Image *) NULL);
+      (void) SetImageMask(wand->image,(Image *) NULL);
 #endif
   CurrentContext=DestroyDrawInfo(CurrentContext);
   wand->index--;
index 78a5d7bd1458c103f72edfdb02eec9b0b7c6cae6..989821825b9f672711f9b61038bf789314025830 100644 (file)
@@ -3490,18 +3490,18 @@ WandExport MagickBooleanType MagickGetImageAlphaChannel(MagickWand *wand)
 %                                                                             %
 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
 %
-%  MagickGetImageClipMask() gets the image clip mask at the current image index.
+%  MagickGetImageMask() gets the image clip mask at the current image index.
 %
-%  The format of the MagickGetImageClipMask method is:
+%  The format of the MagickGetImageMask method is:
 %
-%      MagickWand *MagickGetImageClipMask(MagickWand *wand)
+%      MagickWand *MagickGetImageMask(MagickWand *wand)
 %
 %  A description of each parameter follows:
 %
 %    o wand: the magick wand.
 %
 */
-WandExport MagickWand *MagickGetImageClipMask(MagickWand *wand)
+WandExport MagickWand *MagickGetImageMask(MagickWand *wand)
 {
   Image
     *image;
@@ -3516,7 +3516,7 @@ WandExport MagickWand *MagickGetImageClipMask(MagickWand *wand)
         "ContainsNoImages","`%s'",wand->name);
       return((MagickWand *) NULL);
     }
-  image=GetImageClipMask(wand->images,wand->exception);
+  image=GetImageMask(wand->images,wand->exception);
   if (image == (Image *) NULL)
     return((MagickWand *) NULL);
   return(CloneMagickWandFromImages(wand,image));
@@ -8781,11 +8781,11 @@ WandExport MagickBooleanType MagickSetImageBorderColor(MagickWand *wand,
 %                                                                             %
 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
 %
-%  MagickSetImageClipMask() sets image clip mask.
+%  MagickSetImageMask() sets image clip mask.
 %
-%  The format of the MagickSetImageClipMask method is:
+%  The format of the MagickSetImageMask method is:
 %
-%      MagickBooleanType MagickSetImageClipMask(MagickWand *wand,
+%      MagickBooleanType MagickSetImageMask(MagickWand *wand,
 %        const MagickWand *clip_mask)
 %
 %  A description of each parameter follows:
@@ -8795,7 +8795,7 @@ WandExport MagickBooleanType MagickSetImageBorderColor(MagickWand *wand,
 %    o clip_mask: the clip_mask wand.
 %
 */
-WandExport MagickBooleanType MagickSetImageClipMask(MagickWand *wand,
+WandExport MagickBooleanType MagickSetImageMask(MagickWand *wand,
   const MagickWand *clip_mask)
 {
   assert(wand != (MagickWand *) NULL);
@@ -8808,7 +8808,7 @@ WandExport MagickBooleanType MagickSetImageClipMask(MagickWand *wand,
     (void) LogMagickEvent(WandEvent,GetMagickModule(),"%s",clip_mask->name);
   if (clip_mask->images == (Image *) NULL)
     ThrowWandException(WandError,"ContainsNoImages",clip_mask->name);
-  return(SetImageClipMask(wand->images,clip_mask->images,wand->exception));
+  return(SetImageMask(wand->images,clip_mask->images,wand->exception));
 }
 \f
 /*
index 2847f1e3c287f9ce6e5404eef5126636e705ef0e..6744c3ff28ac1abe0f8e449dc634b0741f8c06ac 100644 (file)
@@ -1074,7 +1074,7 @@ WandExport MagickBooleanType MogrifyImage(ImageInfo *image_info,const int argc,
             (void) SyncImageSettings(mogrify_info,*image,exception);
             if (*option == '+')
               {
-                (void) SetImageClipMask(*image,(Image *) NULL,exception);
+                (void) SetImageMask(*image,(Image *) NULL,exception);
                 break;
               }
             (void) ClipImage(*image,exception);
@@ -1136,7 +1136,7 @@ WandExport MagickBooleanType MogrifyImage(ImageInfo *image_info,const int argc,
             }
             mask_view=DestroyCacheView(mask_view);
             mask_image->matte=MagickTrue;
-            (void) SetImageClipMask(*image,mask_image,exception);
+            (void) SetImageMask(*image,mask_image,exception);
             break;
           }
         if (LocaleCompare("clip-path",option+1) == 0)
@@ -7426,17 +7426,14 @@ WandExport MagickBooleanType MogrifyImageList(ImageInfo *image_info,
                       Set a blending mask for the composition.
                       Possible problem, what if image->mask already set.
                     */
-                    image->mask=mask_image;
-                    (void) NegateImage(image->mask,MagickFalse,exception);
+                    (void) NegateImage(mask_image,MagickFalse,exception);
+                    (void) SetImageMask(image,mask_image,exception);
+                    mask_image=DestroyImage(mask_image);
                   }
               }
             (void) CompositeImage(image,image->compose,composite_image,
               geometry.x,geometry.y,exception);
-            if (mask_image != (Image *) NULL)
-              {
-                image->mask=DestroyImage(image->mask);
-                mask_image=(Image *) NULL;
-              }
+            (void) SetImageMask(image,(Image *) NULL,exception);
             composite_image=DestroyImage(composite_image);
             *images=DestroyImageList(*images);
             *images=image;
index c9c73724b25f436d44912e33662c6cfa64d6c22d..40e6efd21f5092600e5021034eed613128f6f737 100644 (file)
@@ -1813,7 +1813,7 @@ WandExport MagickBooleanType WandSimpleOperatorImage(MagickWand *wand,
           if (plus_alt_op == MagickFalse)
             (void) ClipImage(*image,exception);
           else /* "+clip" remove the write mask */
-            (void) SetImageClipMask(*image,(Image *) NULL,exception);
+            (void) SetImageMask(*image,(Image *) NULL,exception);
           break;
         }
       if (LocaleCompare("clip-mask",option) == 0)
@@ -1868,7 +1868,7 @@ WandExport MagickBooleanType WandSimpleOperatorImage(MagickWand *wand,
           /* clean up and set the write mask */
           mask_view=DestroyCacheView(mask_view);
           mask_image->matte=MagickTrue;
-          (void) SetImageClipMask(*image,mask_image,exception);
+          (void) SetImageMask(*image,mask_image,exception);
           mask_image=DestroyImage(mask_image);
           break;
         }
index 4af4f238cf78d1d90615a50f75068bd27953bdd8..76737498e493ba8205c837fbb2a82001b46ef6d1 100644 (file)
@@ -1234,7 +1234,7 @@ static void SetAttribute(pTHX_ struct PackageInfo *info,Image *image,
           if (SvPOK(sval))
             clip_mask=SetupList(aTHX_ SvRV(sval),&info,(SV ***) NULL,exception);
           for ( ; image; image=image->next)
-            SetImageClipMask(image,clip_mask,exception);
+            SetImageMask(image,clip_mask,exception);
           break;
         }
       if (LocaleNCompare(attribute,"colormap",8) == 0)
@@ -4433,15 +4433,19 @@ Get(ref,...)
             {
               if (image != (Image *) NULL)
                 {
+                  Image
+                    *mask_image;
+
                   SV
                     *sv;
 
                   sv=NULL;
-                  if (image->mask == (Image *) NULL)
+                  if (image->masky == MagickFalse)
                     ClipImage(image,exception);
-                  if (image->mask != (Image *) NULL)
+                  mask_image=GetImageMask(image,exception);
+                  if (mask_image != (Image *) NULL)
                     {
-                      AddImageToRegistry(sv,image->mask);
+                      AddImageToRegistry(sv,mask_image);
                       s=sv_bless(newRV(sv),SvSTASH(reference));
                     }
                 }
@@ -4452,15 +4456,19 @@ Get(ref,...)
             {
               if (image != (Image *) NULL)
                 {
+                  Image
+                    *mask_image;
+
                   SV
                     *sv;
 
                   sv=NULL;
-                  if (image->clip_mask == (Image *) NULL)
+                  if (image->masky != MagickFalse)
                     ClipImage(image,exception);
-                  if (image->clip_mask != (Image *) NULL)
+                  mask_image=GetImageMask(image,exception);
+                  if (mask_image != (Image *) NULL)
                     {
-                      AddImageToRegistry(sv,image->clip_mask);
+                      AddImageToRegistry(sv,mask_image);
                       s=sv_bless(newRV(sv),SvSTASH(reference));
                     }
                 }
@@ -8402,12 +8410,17 @@ Mogrify(ref,...)
                 }
               else
                 {
+                  Image
+                    *mask_image;
+
                   /*
                     Set a blending mask for the composition.
                   */
-                  image->mask=CloneImage(argument_list[10].image_reference,0,0,
+                  mask_image=CloneImage(argument_list[10].image_reference,0,0,
                     MagickTrue,exception);
-                  (void) NegateImage(image->mask,MagickFalse,exception);
+                  (void) NegateImage(mask_image,MagickFalse,exception);
+                  (void) SetImageMask(image,mask_image,exception);
+                  mask_image=DestroyImage(mask_image);
                 }
             }
           if (attribute_flag[11] != 0) /* channel */
@@ -8444,7 +8457,7 @@ Mogrify(ref,...)
                   (image->compose == DistortCompositeOp))
                 composite_image=DestroyImage(composite_image);
               else
-                image->mask=DestroyImage(image->mask);
+                (void) SetImageMask(image,(Image *) NULL,exception);
             }
           (void) SetPixelChannelMask(image,channel_mask);
           break;
@@ -10134,15 +10147,20 @@ Mogrify(ref,...)
         }
         case 106:  /* ClipMask */
         {
+          Image
+            *mask_image;
+
           if (attribute_flag[0] == 0)
             {
               ThrowPerlException(exception,OptionError,"MaskImageRequired",
                 PackageName);
               goto PerlException;
             }
-          image->clip_mask=CloneImage(argument_list[0].image_reference,0,0,
-            MagickTrue,exception);
-          (void) NegateImage(image->clip_mask,MagickFalse,exception);
+          mask_image=CloneImage(argument_list[0].image_reference,0,0,MagickTrue,
+            exception);
+          (void) NegateImage(mask_image,MagickFalse,exception);
+          (void) SetImageMask(image,mask_image,exception);
+          mask_image=DestroyImage(mask_image);
           break;
         }
         case 107:  /* LinearStretch */
@@ -10218,15 +10236,20 @@ Mogrify(ref,...)
         }
         case 109:  /* Mask */
         {
+          Image
+            *mask_image;
+
           if (attribute_flag[0] == 0)
             {
               ThrowPerlException(exception,OptionError,"MaskImageRequired",
                 PackageName);
               goto PerlException;
             }
-          image->mask=CloneImage(argument_list[0].image_reference,0,0,
+          mask_image=CloneImage(argument_list[0].image_reference,0,0,
             MagickTrue,exception);
-          (void) NegateImage(image->mask,MagickFalse,exception);
+          (void) NegateImage(mask_image,MagickFalse,exception);
+          (void) SetImageMask(image,mask_image,exception);
+          mask_image=DestroyImage(mask_image);
           break;
         }
         case 110:  /* Polaroid */
index 9f4076afa47a3f5a2f85bec24a864cf75e84992f..3e779f3b0c1d9bc509b82bf2dab9339b8e737181 100644 (file)
@@ -160,14 +160,13 @@ static MagickBooleanType WriteCLIPImage(const ImageInfo *image_info,
   MagickBooleanType
     status;
 
-  if (image->clip_mask == (Image *) NULL)
+  if (image->masky == MagickFalse)
     (void) ClipImage(image,exception);
-  if (image->clip_mask == (Image *) NULL)
+  if (image->masky == MagickFalse)
     ThrowWriterException(CoderError,"ImageDoesNotHaveAClipMask");
-  clip_image=CloneImage(image->clip_mask,0,0,MagickTrue,exception);
+  clip_image=GetImageMask(image,exception);
   if (clip_image == (Image *) NULL)
     return(MagickFalse);
-  (void) SetImageType(clip_image,TrueColorType,exception);
   (void) CopyMagickString(clip_image->filename,image->filename,MaxTextExtent);
   write_info=CloneImageInfo(image_info);
   (void) SetImageInfo(write_info,1,exception);
index 3fa0a3b1ad8ded109a23404f82945f0bc5d1c4c1..5e8f8af3054c558e89bfaa12467f6256e89a5a2a 100644 (file)
@@ -6061,7 +6061,7 @@ static void MSLStartElement(void *context,const xmlChar *tag,
                       &exception);
                     if (LocaleCompare(property,value) == 0)
                       {
-                        SetImageClipMask(msl_info->image[n],msl_info->image[j],
+                        SetImageMask(msl_info->image[n],msl_info->image[j],
                           &exception);
                         break;
                       }
index 55573586c234bc6d7eed998e275db6f2192cf8c5..81badfdce358d35b5c7c1dc7b92faa6c91685b0a 100644 (file)
@@ -1125,16 +1125,15 @@ static MagickBooleanType WritePS3Image(const ImageInfo *image_info,Image *image,
     /*
       PS clipping path from Photoshop clipping path.
     */
-    if ((image->clip_mask == (Image *) NULL) ||
-        (LocaleNCompare("8BIM:",image->clip_mask->magick_filename,5) != 0))
+    if ((image->masky != MagickFalse) ||
+        (LocaleNCompare("8BIM:",image->magick_filename,5) != 0))
       (void) WriteBlobString(image,"/ClipImage {} def\n");
     else
       {
         const char
           *value;
 
-        value=GetImageProperty(image,image->clip_mask->magick_filename,
-          exception);
+        value=GetImageProperty(image,image->magick_filename,exception);
         if (value == (const char *) NULL)
           return(MagickFalse);
         (void) WriteBlobString(image,value);
@@ -1202,8 +1201,8 @@ static MagickBooleanType WritePS3Image(const ImageInfo *image_info,Image *image,
     /*
       Photoshop clipping path active?
     */
-    if ((image->clip_mask != (Image *) NULL) &&
-        (LocaleNCompare("8BIM:",image->clip_mask->magick_filename,5) == 0))
+    if ((image->masky != MagickFalse) &&
+        (LocaleNCompare("8BIM:",image->magick_filename,5) == 0))
         (void) WriteBlobString(image,"true\n");
       else
         (void) WriteBlobString(image,"false\n");