]> granicus.if.org Git - imagemagick/commitdiff
Revert write mask mod
authorCristy <urban-warrior@imagemagick.org>
Sun, 27 Nov 2016 13:21:05 +0000 (08:21 -0500)
committerCristy <urban-warrior@imagemagick.org>
Sun, 27 Nov 2016 13:21:05 +0000 (08:21 -0500)
34 files changed:
MagickCore/accelerate.c
MagickCore/annotate.c
MagickCore/attribute.c
MagickCore/channel.c
MagickCore/compare.c
MagickCore/composite.c
MagickCore/decorate.c
MagickCore/draw.c
MagickCore/effect.c
MagickCore/enhance.c
MagickCore/fx.c
MagickCore/image.c
MagickCore/morphology.c
MagickCore/nt-base.c
MagickCore/opencl.c
MagickCore/option.c
MagickCore/paint.c
MagickCore/property.c
MagickCore/quantize.c
MagickCore/quantum-export.c
MagickCore/quantum-import.c
MagickCore/resize.c
MagickCore/shear.c
MagickCore/signature.c
MagickCore/splay-tree.c
MagickCore/statistic.c
MagickCore/threshold.c
MagickCore/transform.c
MagickCore/utility.c
MagickWand/compare.c
MagickWand/convert.c
MagickWand/mogrify.c
MagickWand/montage.c
MagickWand/operation.c

index e9a0f929cbbc6be4240bc3b77e2710cd3f8a9836..cf8b1f1722eb97975e76c245fa6ab818feafdf72 100644 (file)
@@ -4571,8 +4571,8 @@ static Image* ComputeRotationalBlurImage(const Image *image,MagickCLEnv clEnv,
   if (filteredImageBuffer == (cl_mem) NULL)
     goto cleanup;
 
-  blurCenter.s[0]=(float) (image->columns-1)/2.0;
-  blurCenter.s[1]=(float) (image->rows-1)/2.0;
+  blurCenter.x=(float) (image->columns-1)/2.0;
+  blurCenter.y=(float) (image->rows-1)/2.0;
   blurRadius=hypot(blurCenter.x,blurCenter.y);
   cossin_theta_size=(unsigned int) fabs(4.0*DegreesToRadians(angle)*sqrt(
     (double) blurRadius)+2UL);
index a53173924396021e4f1dd5e3e72b627e7d07c4c1..5e92ae27e5718857b260a40c1fef9588e043ee89 100644 (file)
@@ -613,7 +613,6 @@ MagickExport ssize_t FormatMagickCaption(Image *image,DrawInfo *draw_info,
     n;
 
   digit=MagickFalse;
-  width=0;
   q=draw_info->text;
   s=(char *) NULL;
   for (p=(*caption); GetUTFCode(p) != 0; p+=GetUTFOctets(p))
@@ -659,61 +658,6 @@ MagickExport ssize_t FormatMagickCaption(Image *image,DrawInfo *draw_info,
     q=draw_info->text;
     s=(char *) NULL;
   }
-  if (width > image->columns)
-    {
-      char
-        *text;
-
-      /*
-        No convenient break point, force one.
-      */
-      text=AcquireString(draw_info->text);
-      q=draw_info->text;
-      s=(char *) NULL;
-      for (p=(*caption); GetUTFCode(p) != 0; p+=GetUTFOctets(p))
-      {
-        if (IsUTFSpace(GetUTFCode(p)) != MagickFalse)
-          s=p;
-        if (GetUTFCode(p) == '\n')
-          q=draw_info->text;
-        for (i=0; i < (ssize_t) GetUTFOctets(p); i++)
-          *q++=(*(p+i));
-        *q='\0';
-        status=GetTypeMetrics(image,draw_info,metrics,exception);
-        if (status == MagickFalse)
-          break;
-        width=(size_t) floor(metrics->width+draw_info->stroke_width+0.5);
-        if ((width <= image->columns) || (strcmp(text,draw_info->text) == 0))
-          continue;
-        (void) strcpy(text,draw_info->text);
-        if ((s != (char *) NULL) && (GetUTFOctets(s) == 1))
-          {
-            *s='\n';
-            p=s;
-          }
-        else
-          if ((s != (char *) NULL) || (split != MagickFalse))
-            {
-              char
-                *target;
-
-              /*
-                No convenient line breaks-- insert newline.
-              */
-              target=AcquireString(*caption);
-              n=p-(*caption);
-              CopyMagickString(target,*caption,n+1);
-              ConcatenateMagickString(target,"\n",strlen(*caption)+1);
-              ConcatenateMagickString(target,p,strlen(*caption)+2);
-              (void) DestroyString(*caption);
-              *caption=target;
-              p=(*caption)+n;
-            }
-        q=draw_info->text;
-        s=(char *) NULL;
-      }
-      text=DestroyString(text);
-    }
   n=0;
   for (p=(*caption); GetUTFCode(p) != 0; p+=GetUTFOctets(p))
     if (GetUTFCode(p) == '\n')
index 717e7f6901903e40bd80d5421ec9153debf79930..f6510b7bf318451a4a2326632aead2a9c53f7747 100644 (file)
@@ -407,7 +407,7 @@ MagickExport size_t GetImageDepth(const Image *image,ExceptionInfo *exception)
           continue;
         for (x=0; x < (ssize_t) image->columns; x++)
         {
-          if (GetPixelWriteMask(image,p) == QuantumRange)
+          if (GetPixelReadMask(image,p) == 0)
             {
               p+=GetPixelChannels(image);
               continue;
@@ -464,7 +464,7 @@ MagickExport size_t GetImageDepth(const Image *image,ExceptionInfo *exception)
       continue;
     for (x=0; x < (ssize_t) image->columns; x++)
     {
-      if (GetPixelWriteMask(image,p) == QuantumRange)
+      if (GetPixelReadMask(image,p) == 0)
         {
           p+=GetPixelChannels(image);
           continue;
@@ -679,7 +679,8 @@ MagickExport ImageType IdentifyImageGray(const Image *image,
           type=UndefinedType;
           break;
         }
-      if ((type == BilevelType) && (IsPixelMonochrome(image,p) == MagickFalse))
+      if ((type == BilevelType) &&
+          (IsPixelMonochrome(image,p) == MagickFalse))
         type=GrayscaleType;
       p+=GetPixelChannels(image);
     }
@@ -1094,7 +1095,7 @@ MagickExport MagickBooleanType SetImageDepth(Image *image,
           register ssize_t
             i;
 
-          if (GetPixelWriteMask(image,q) == QuantumRange)
+          if (GetPixelReadMask(image,q) == 0)
             {
               q+=GetPixelChannels(image);
               continue;
@@ -1158,7 +1159,7 @@ MagickExport MagickBooleanType SetImageDepth(Image *image,
       register ssize_t
         i;
 
-      if (GetPixelWriteMask(image,q) == QuantumRange)
+      if (GetPixelReadMask(image,q) == 0)
         {
           q+=GetPixelChannels(image);
           continue;
index dcc0155118dd602e1b8133b128f9b58f8f4df582..38282e8d7860186dc4636211ad54579c74c71673 100644 (file)
@@ -511,7 +511,7 @@ MagickExport Image *CombineImages(const Image *image,
   {
     case UndefinedColorspace:
     case sRGBColorspace:
-    {
+    { 
       if (GetImageListLength(image) > 3)
         combine_image->alpha_trait=BlendPixelTrait;
       break;
@@ -523,7 +523,7 @@ MagickExport Image *CombineImages(const Image *image,
       break;
     }
     case CMYKColorspace:
-    {
+    { 
       if (GetImageListLength(image) > 4)
         combine_image->alpha_trait=BlendPixelTrait;
       break;
@@ -754,7 +754,7 @@ MagickExport Image *SeparateImage(const Image *image,
       register ssize_t
         i;
 
-      if (GetPixelWriteMask(image,p) == QuantumRange)
+      if (GetPixelReadMask(image,p) == 0)
         {
           SetPixelBackgoundColor(separate_image,q);
           p+=GetPixelChannels(image);
@@ -1005,11 +1005,11 @@ MagickExport MagickBooleanType SetImageAlphaChannel(Image *image,
         {
           double
             gamma;
-
+  
           register ssize_t
             i;
-
-          if (GetPixelWriteMask(image,q) == QuantumRange)
+  
+          if (GetPixelReadMask(image,q) == 0)
             {
               q+=GetPixelChannels(image);
               continue;
@@ -1082,13 +1082,17 @@ MagickExport MagickBooleanType SetImageAlphaChannel(Image *image,
       return(status);
     }
     case CopyAlphaChannel:
+    case ShapeAlphaChannel:
     {
       /*
         Copy pixel intensity to the alpha channel.
       */
-      image->alpha_trait=BlendPixelTrait;
+      image->alpha_trait=UpdatePixelTrait;
       status=CompositeImage(image,image,IntensityCompositeOp,MagickTrue,0,0,
         exception);
+      if (alpha_type == ShapeAlphaChannel)
+        (void) LevelImageColors(image,&image->background_color,
+          &image->background_color,MagickTrue,exception);
       break;
     }
     case DeactivateAlphaChannel:
@@ -1132,13 +1136,13 @@ MagickExport MagickBooleanType SetImageAlphaChannel(Image *image,
         for (x=0; x < (ssize_t) image->columns; x++)
         {
           double
-            gamma,
+            gamma, 
             Sa;
 
           register ssize_t
             i;
 
-          if (GetPixelWriteMask(image,q) == QuantumRange)
+          if (GetPixelReadMask(image,q) == 0)
             {
               q+=GetPixelChannels(image);
               continue;
@@ -1247,55 +1251,6 @@ MagickExport MagickBooleanType SetImageAlphaChannel(Image *image,
         status=SetImageAlpha(image,OpaqueAlpha,exception);
       break;
     }
-    case ShapeAlphaChannel:
-    {
-      PixelInfo
-        background;
-
-      /*
-        Shape alpha channel.
-      */
-      image->alpha_trait=BlendPixelTrait;
-      status=SetImageStorageClass(image,DirectClass,exception);
-      if (status == MagickFalse)
-        break;
-      ConformPixelInfo(image,&image->background_color,&background,exception);
-      status=MagickTrue;
-      image_view=AcquireAuthenticCacheView(image,exception);
-      for (y=0; y < (ssize_t) image->rows; y++)
-      {
-        register Quantum
-          *magick_restrict q;
-
-        register ssize_t
-          x;
-
-        if (status == MagickFalse)
-          continue;
-        q=GetCacheViewAuthenticPixels(image_view,0,y,image->columns,1,
-          exception);
-        if (q == (Quantum *) NULL)
-          {
-            status=MagickFalse;
-            continue;
-          }
-        for (x=0; x < (ssize_t) image->columns; x++)
-        {
-          if (GetPixelWriteMask(image,q) == QuantumRange)
-            {
-              q+=GetPixelChannels(image);
-              continue;
-            }
-          if (fabs(GetPixelIntensity(image,q)) > MagickEpsilon)
-            SetPixelViaPixelInfo(image,&background,q);
-          q+=GetPixelChannels(image);
-        }
-        if (SyncCacheViewAuthenticPixels(image_view,exception) == MagickFalse)
-          status=MagickFalse;
-      }
-      image_view=DestroyCacheView(image_view);
-      break;
-    }
     case TransparentAlphaChannel:
     {
       status=SetImageAlpha(image,TransparentAlpha,exception);
index adfd562ed8a46b98893bd9a0a26eaf00ec2803ff..d3349dbdecf4535985faa1de3f30fdcea9f352fc 100644 (file)
@@ -675,7 +675,6 @@ static MagickBooleanType GetMeanErrorPerPixel(Image *image,
 
   double
     area,
-    gamma,
     maximum_error,
     mean_error;
 
@@ -754,9 +753,8 @@ static MagickBooleanType GetMeanErrorPerPixel(Image *image,
   }
   reconstruct_view=DestroyCacheView(reconstruct_view);
   image_view=DestroyCacheView(image_view);
-  gamma=PerceptibleReciprocal(area);
-  image->error.mean_error_per_pixel=gamma*distortion[CompositePixelChannel];
-  image->error.normalized_mean_error=gamma*QuantumScale*QuantumScale*mean_error;
+  image->error.mean_error_per_pixel=distortion[CompositePixelChannel]/area;
+  image->error.normalized_mean_error=QuantumScale*QuantumScale*mean_error/area;
   image->error.normalized_maximum_error=QuantumScale*maximum_error;
   return(status);
 }
@@ -1648,7 +1646,6 @@ MagickExport MagickBooleanType SetImageColorMetric(Image *image,
 
   double
     area,
-    gamma,
     maximum_error,
     mean_error,
     mean_error_per_pixel;
@@ -1729,10 +1726,10 @@ MagickExport MagickBooleanType SetImageColorMetric(Image *image,
   }
   reconstruct_view=DestroyCacheView(reconstruct_view);
   image_view=DestroyCacheView(image_view);
-  gamma=PerceptibleReciprocal(area);
-  image->error.mean_error_per_pixel=gamma*mean_error_per_pixel;
-  image->error.normalized_mean_error=gamma*QuantumScale*QuantumScale*mean_error;
-  image->error.normalized_maximum_error=(double) QuantumScale*maximum_error;
+  image->error.mean_error_per_pixel=(double) (mean_error_per_pixel/area);
+  image->error.normalized_mean_error=(double) (QuantumScale*QuantumScale*
+    mean_error/area);
+  image->error.normalized_maximum_error=(double) (QuantumScale*maximum_error);
   status=image->error.mean_error_per_pixel == 0.0 ? MagickTrue : MagickFalse;
   return(status);
 }
index 64e6495019c1a6897a8c64745c5b916e88042df4..f9945b2c96ef0ed4bdf71f6d926240784ff45f8d 100644 (file)
@@ -284,6 +284,234 @@ static void CompositeHCL(const MagickRealType red,const MagickRealType green,
   *luma=QuantumScale*(0.298839*r+0.586811*g+0.114350*b);
 }
 
+static MagickBooleanType CompositeOverImage(Image *image,
+  const Image *source_image,const MagickBooleanType clip_to_self,
+  const ssize_t x_offset,const ssize_t y_offset,ExceptionInfo *exception)
+{
+#define CompositeImageTag  "Composite/Image"
+
+  CacheView
+    *image_view,
+    *source_view;
+
+  const char
+    *value;
+
+  MagickBooleanType
+    clamp,
+    status;
+
+  MagickOffsetType
+    progress;
+
+  ssize_t
+    y;
+
+  /*
+    Composite image.
+  */
+  status=MagickTrue;
+  progress=0;
+  clamp=MagickTrue;
+  value=GetImageArtifact(image,"compose:clamp");
+  if (value != (const char *) NULL)
+    clamp=IsStringTrue(value);
+  source_view=AcquireVirtualCacheView(source_image,exception);
+  image_view=AcquireAuthenticCacheView(image,exception);
+#if defined(MAGICKCORE_OPENMP_SUPPORT)
+  #pragma omp parallel for schedule(static,4) shared(progress,status) \
+    magick_threads(source_image,image,image->rows,1)
+#endif
+  for (y=0; y < (ssize_t) image->rows; y++)
+  {
+    const Quantum
+      *pixels;
+
+    register const Quantum
+      *magick_restrict p;
+
+    register Quantum
+      *magick_restrict q;
+
+    register ssize_t
+      x;
+
+    size_t
+      channels;
+
+    if (status == MagickFalse)
+      continue;
+    if (clip_to_self != MagickFalse)
+      {
+        if (y < y_offset)
+          continue;
+        if ((y-y_offset) >= (ssize_t) source_image->rows)
+          continue;
+      }
+    /*
+      If pixels is NULL, y is outside overlay region.
+    */
+    pixels=(Quantum *) NULL;
+    p=(Quantum *) NULL;
+    if ((y >= y_offset) && ((y-y_offset) < (ssize_t) source_image->rows))
+      {
+        p=GetCacheViewVirtualPixels(source_view,0,y-y_offset,
+          source_image->columns,1,exception);
+        if (p == (const Quantum *) NULL)
+          {
+            status=MagickFalse;
+            continue;
+          }
+        pixels=p;
+        if (x_offset < 0)
+          p-=x_offset*GetPixelChannels(source_image);
+      }
+    q=GetCacheViewAuthenticPixels(image_view,0,y,image->columns,1,exception);
+    if (q == (Quantum *) NULL)
+      {
+        status=MagickFalse;
+        continue;
+      }
+    for (x=0; x < (ssize_t) image->columns; x++)
+    {
+      MagickRealType
+        Da,
+        Dc,
+        Dca,
+        gamma,
+        Sa,
+        Sc,
+        Sca;
+
+      register ssize_t
+        i;
+
+      if (clip_to_self != MagickFalse)
+        {
+          if (x < x_offset)
+            {
+              q+=GetPixelChannels(image);
+              continue;
+            }
+          if ((x-x_offset) >= (ssize_t) source_image->columns)
+            break;
+        }
+      if ((pixels == (Quantum *) NULL) || (x < x_offset) ||
+          ((x-x_offset) >= (ssize_t) source_image->columns))
+        {
+          Quantum
+            source[MaxPixelChannels];
+
+          /*
+            Virtual composite:
+              Sc: source color.
+              Dc: canvas color.
+          */
+          if (GetPixelReadMask(image,q) == 0)
+            {
+              q+=GetPixelChannels(image);
+              continue;
+            }
+          (void) GetOneVirtualPixel(source_image,x-x_offset,y-y_offset,
+            source,exception);
+          for (i=0; i < (ssize_t) GetPixelChannels(image); i++)
+          {
+            PixelChannel channel=GetPixelChannelChannel(image,i);
+            PixelTrait traits=GetPixelChannelTraits(image,channel);
+            PixelTrait source_traits=GetPixelChannelTraits(source_image,
+              channel);
+            if ((traits == UndefinedPixelTrait) ||
+                (source_traits == UndefinedPixelTrait))
+              continue;
+            q[i]=source[channel];
+          }
+          q+=GetPixelChannels(image);
+          continue;
+        }
+      /*
+        Authentic composite:
+          Sa:  normalized source alpha.
+          Da:  normalized canvas alpha.
+      */
+      if (GetPixelReadMask(source_image,p) == 0)
+        {
+          p+=GetPixelChannels(source_image);
+          channels=GetPixelChannels(source_image);
+          if (p >= (pixels+channels*source_image->columns))
+            p=pixels;
+          q+=GetPixelChannels(image);
+          continue;
+        }
+      Sa=QuantumScale*GetPixelAlpha(source_image,p);
+      Da=QuantumScale*GetPixelAlpha(image,q);
+      gamma=Sa+Da-Sa*Da;
+      gamma=PerceptibleReciprocal(gamma);
+      for (i=0; i < (ssize_t) GetPixelChannels(image); i++)
+      {
+        PixelChannel channel=GetPixelChannelChannel(image,i);
+        PixelTrait traits=GetPixelChannelTraits(image,channel);
+        PixelTrait source_traits=GetPixelChannelTraits(source_image,
+          channel);
+        if ((traits == UndefinedPixelTrait) ||
+            (source_traits == UndefinedPixelTrait))
+          continue;
+        if ((traits & CopyPixelTrait) != 0)
+          {
+            /*
+              Copy channel.
+            */
+            q[i]=GetPixelChannel(source_image,channel,p);
+            continue;
+          }
+        if (channel == AlphaPixelChannel)
+          {
+            /*
+              Set alpha channel.
+            */
+            q[i]=clamp != MagickFalse ?
+              ClampPixel(QuantumRange*(Sa+Da-Sa*Da)) :
+              ClampToQuantum(QuantumRange*(Sa+Da-Sa*Da));
+            continue;
+          }
+        /*
+          Sc: source color.
+          Dc: canvas color.
+        */
+        Sc=(MagickRealType) GetPixelChannel(source_image,channel,p);
+        Dc=(MagickRealType) q[i];
+        Sca=QuantumScale*Sa*Sc;
+        Dca=QuantumScale*Da*Dc;
+        q[i]=clamp != MagickFalse ?
+          ClampPixel(gamma*QuantumRange*(Sca+Dca*(1.0-Sa))) :
+          ClampToQuantum(gamma*QuantumRange*(Sca+Dca*(1.0-Sa)));
+      }
+      p+=GetPixelChannels(source_image);
+      channels=GetPixelChannels(source_image);
+      if (p >= (pixels+channels*source_image->columns))
+        p=pixels;
+      q+=GetPixelChannels(image);
+    }
+    if (SyncCacheViewAuthenticPixels(image_view,exception) == MagickFalse)
+      status=MagickFalse;
+    if (image->progress_monitor != (MagickProgressMonitor) NULL)
+      {
+        MagickBooleanType
+          proceed;
+
+#if defined(MAGICKCORE_OPENMP_SUPPORT)
+        #pragma omp critical (MagickCore_CompositeImage)
+#endif
+        proceed=SetImageProgress(image,CompositeImageTag,progress++,
+          image->rows);
+        if (proceed == MagickFalse)
+          status=MagickFalse;
+      }
+  }
+  source_view=DestroyCacheView(source_view);
+  image_view=DestroyCacheView(image_view);
+  return(status);
+}
+
 MagickExport MagickBooleanType CompositeImage(Image *image,
   const Image *composite,const CompositeOperator compose,
   const MagickBooleanType clip_to_self,const ssize_t x_offset,
@@ -341,6 +569,13 @@ MagickExport MagickBooleanType CompositeImage(Image *image,
   if (IsGrayColorspace(image->colorspace) != MagickFalse)
     (void) SetImageColorspace(image,sRGBColorspace,exception);
   (void) SetImageColorspace(source_image,image->colorspace,exception);
+  if ((compose == OverCompositeOp) || (compose == SrcOverCompositeOp))
+    {
+      status=CompositeOverImage(image,source_image,clip_to_self,x_offset,
+        y_offset,exception);
+      source_image=DestroyImage(source_image);
+      return(status);
+    }
   amount=0.5;
   canvas_image=(Image *) NULL;
   canvas_dissolve=1.0;
@@ -400,7 +635,7 @@ MagickExport MagickBooleanType CompositeImage(Image *image,
           register ssize_t
             i;
 
-          if (GetPixelWriteMask(source_image,p) == QuantumRange)
+          if (GetPixelReadMask(source_image,p) == 0)
             {
               p+=GetPixelChannels(source_image);
               q+=GetPixelChannels(image);
@@ -486,7 +721,7 @@ MagickExport MagickBooleanType CompositeImage(Image *image,
           }
         for (x=0; x < (ssize_t) source_image->columns; x++)
         {
-          if (GetPixelWriteMask(source_image,p) == QuantumRange)
+          if (GetPixelReadMask(source_image,p) == 0)
             {
               p+=GetPixelChannels(source_image);
               q+=GetPixelChannels(image);
@@ -1082,7 +1317,7 @@ MagickExport MagickBooleanType CompositeImage(Image *image,
           */
           (void) GetOneVirtualPixel(source_image,x-x_offset,y-y_offset,source,
             exception);
-          if (GetPixelWriteMask(image,q) == QuantumRange)
+          if (GetPixelReadMask(image,q) == 0)
             {
               q+=GetPixelChannels(image);
               continue;
@@ -1241,7 +1476,7 @@ MagickExport MagickBooleanType CompositeImage(Image *image,
           break;
         }
       }
-      if (GetPixelWriteMask(image,q) == QuantumRange)
+      if (GetPixelReadMask(image,q) == 0)
         {
           p+=GetPixelChannels(source_image);
           q+=GetPixelChannels(image);
@@ -2244,7 +2479,7 @@ MagickExport MagickBooleanType TextureImage(Image *image,const Image *texture,
         register ssize_t
           i;
 
-        if (GetPixelWriteMask(image,q) == QuantumRange)
+        if (GetPixelReadMask(image,q) == 0)
           {
             p+=GetPixelChannels(texture_image);
             q+=GetPixelChannels(image);
index 30b4d8406f87ffd54e605cd23194a81321dae43b..a0ccca8761fc07aaae3a57bb70e8d9e377f3e852 100644 (file)
@@ -441,7 +441,7 @@ MagickExport Image *FrameImage(const Image *image,const FrameInfo *frame_info,
         register ssize_t
           i;
 
-        if (GetPixelWriteMask(image,q) == QuantumRange)
+        if (GetPixelReadMask(image,q) == 0)
           {
             SetPixelBackgoundColor(frame_image,q);
             p+=GetPixelChannels(image);
@@ -714,7 +714,7 @@ MagickExport MagickBooleanType RaiseImage(Image *image,
       }
     for (x=0; x < y; x++)
     {
-      if (GetPixelWriteMask(image,q) == QuantumRange)
+      if (GetPixelReadMask(image,q) == 0)
         {
           q+=GetPixelChannels(image);
           continue;
@@ -732,7 +732,7 @@ MagickExport MagickBooleanType RaiseImage(Image *image,
     }
     for ( ; x < (ssize_t) (image->columns-y); x++)
     {
-      if (GetPixelWriteMask(image,q) == QuantumRange)
+      if (GetPixelReadMask(image,q) == 0)
         {
           q+=GetPixelChannels(image);
           continue;
@@ -750,7 +750,7 @@ MagickExport MagickBooleanType RaiseImage(Image *image,
     }
     for ( ; x < (ssize_t) image->columns; x++)
     {
-      if (GetPixelWriteMask(image,q) == QuantumRange)
+      if (GetPixelReadMask(image,q) == 0)
         {
           q+=GetPixelChannels(image);
           continue;
@@ -804,7 +804,7 @@ MagickExport MagickBooleanType RaiseImage(Image *image,
       }
     for (x=0; x < (ssize_t) raise_info->width; x++)
     {
-      if (GetPixelWriteMask(image,q) == QuantumRange)
+      if (GetPixelReadMask(image,q) == 0)
         {
           q+=GetPixelChannels(image);
           continue;
@@ -824,7 +824,7 @@ MagickExport MagickBooleanType RaiseImage(Image *image,
       q+=GetPixelChannels(image);
     for ( ; x < (ssize_t) image->columns; x++)
     {
-      if (GetPixelWriteMask(image,q) == QuantumRange)
+      if (GetPixelReadMask(image,q) == 0)
         {
           q+=GetPixelChannels(image);
           continue;
@@ -878,7 +878,7 @@ MagickExport MagickBooleanType RaiseImage(Image *image,
       }
     for (x=0; x < (ssize_t) (image->rows-y); x++)
     {
-      if (GetPixelWriteMask(image,q) == QuantumRange)
+      if (GetPixelReadMask(image,q) == 0)
         {
           q+=GetPixelChannels(image);
           continue;
@@ -909,7 +909,7 @@ MagickExport MagickBooleanType RaiseImage(Image *image,
     }
     for ( ; x < (ssize_t) image->columns; x++)
     {
-      if (GetPixelWriteMask(image,q) == QuantumRange)
+      if (GetPixelReadMask(image,q) == 0)
         {
           q+=GetPixelChannels(image);
           continue;
index 4e4ebb1cdab23db8e458db30d7f443cb26588595..f12760db522c71c5cd5b271d6ccabf47f4c41085 100644 (file)
@@ -1421,7 +1421,7 @@ MagickExport MagickBooleanType DrawClipPath(Image *image,
   clip_mask=CloneImage(image,image->columns,image->rows,MagickTrue,exception);
   if (clip_mask == (Image *) NULL)
     return(MagickFalse);
-  (void) QueryColorCompliance("#ffffff",AllCompliance,
+  (void) QueryColorCompliance("#0000",AllCompliance,
     &clip_mask->background_color,exception);
   clip_mask->background_color.alpha=(MagickRealType) TransparentAlpha;
   (void) SetImageBackgroundColor(clip_mask,exception);
@@ -1430,13 +1430,13 @@ MagickExport MagickBooleanType DrawClipPath(Image *image,
       draw_info->clip_mask);
   clone_info=CloneDrawInfo((ImageInfo *) NULL,draw_info);
   (void) CloneString(&clone_info->primitive,value);
-  (void) QueryColorCompliance("#000000",AllCompliance,&clone_info->fill,
+  (void) QueryColorCompliance("#ffffff",AllCompliance,&clone_info->fill,
     exception);
-  if (clone_info->clip_mask != (char *) NULL)
-    clone_info->clip_mask=DestroyString(clone_info->clip_mask);
-  status=DrawImage(clip_mask,clone_info,exception);
+  clone_info->clip_mask=(char *) NULL;
+  status=NegateImage(clip_mask,MagickFalse,exception);
   (void) SetImageMask(image,ReadPixelMask,clip_mask,exception);
   clip_mask=DestroyImage(clip_mask);
+  status&=DrawImage(image,clone_info,exception);
   clone_info=DestroyDrawInfo(clone_info);
   if (image->debug != MagickFalse)
     (void) LogMagickEvent(DrawEvent,GetMagickModule(),"end clip-path");
@@ -4957,7 +4957,6 @@ MagickExport void GetDrawInfo(const ImageInfo *image_info,DrawInfo *draw_info)
   draw_info->fill_rule=EvenOddRule;
   draw_info->fill_alpha=OpaqueAlpha;
   draw_info->stroke_alpha=OpaqueAlpha;
-  draw_info->alpha=OpaqueAlpha;
   draw_info->linecap=ButtCap;
   draw_info->linejoin=MiterJoin;
   draw_info->miterlimit=10;
index f182e6d9625115e2f17224722770be9ada230a6f..5a33212fb776b6cc8162c49f47d9bab53067667d 100644 (file)
@@ -336,7 +336,7 @@ MagickExport Image *AdaptiveBlurImage(const Image *image,const double radius,
             (blur_traits == UndefinedPixelTrait))
           continue;
         if (((blur_traits & CopyPixelTrait) != 0) ||
-            (GetPixelWriteMask(image,p+center) == QuantumRange))
+            (GetPixelReadMask(image,p+center) == 0))
           {
             SetPixelChannel(blur_image,channel,p[center+i],q);
             continue;
@@ -657,7 +657,7 @@ MagickExport Image *AdaptiveSharpenImage(const Image *image,const double radius,
             (sharp_traits == UndefinedPixelTrait))
           continue;
         if (((sharp_traits & CopyPixelTrait) != 0) ||
-            (GetPixelWriteMask(image,p+center) == QuantumRange))
+            (GetPixelReadMask(image,p+center) == 0))
           {
             SetPixelChannel(sharp_image,channel,p[center+i],q);
             continue;
@@ -2136,7 +2136,7 @@ MagickExport Image *MotionBlurImage(const Image *image,const double radius,
             (blur_traits == UndefinedPixelTrait))
           continue;
         if (((blur_traits & CopyPixelTrait) != 0) ||
-            (GetPixelWriteMask(image,p) == QuantumRange))
+            (GetPixelReadMask(image,p) == 0))
           {
             SetPixelChannel(blur_image,channel,p[i],q);
             continue;
@@ -2935,7 +2935,7 @@ MagickExport Image *RotationalBlurImage(const Image *image,const double angle,
             (blur_traits == UndefinedPixelTrait))
           continue;
         if (((blur_traits & CopyPixelTrait) != 0) ||
-            (GetPixelWriteMask(image,p) == QuantumRange))
+            (GetPixelReadMask(image,p) == 0))
           {
             SetPixelChannel(blur_image,channel,p[i],q);
             continue;
@@ -3249,7 +3249,7 @@ MagickExport Image *SelectiveBlurImage(const Image *image,const double radius,
             (blur_traits == UndefinedPixelTrait))
           continue;
         if (((blur_traits & CopyPixelTrait) != 0) ||
-            (GetPixelWriteMask(image,p+center) == QuantumRange))
+            (GetPixelReadMask(image,p+center) == 0))
           {
             SetPixelChannel(blur_image,channel,p[center+i],q);
             continue;
@@ -3541,7 +3541,7 @@ MagickExport Image *ShadeImage(const Image *image,const MagickBooleanType gray,
             (shade_traits == UndefinedPixelTrait))
           continue;
         if (((shade_traits & CopyPixelTrait) != 0) ||
-            (GetPixelWriteMask(linear_image,center) == QuantumRange))
+            (GetPixelReadMask(linear_image,center) == 0))
           {
             SetPixelChannel(shade_image,channel,center[i],q);
             continue;
@@ -3982,7 +3982,7 @@ MagickExport Image *UnsharpMaskImage(const Image *image,const double radius,
             (unsharp_traits == UndefinedPixelTrait))
           continue;
         if (((unsharp_traits & CopyPixelTrait) != 0) ||
-            (GetPixelWriteMask(image,p) == QuantumRange))
+            (GetPixelReadMask(image,p) == 0))
           {
             SetPixelChannel(unsharp_image,channel,p[i],q);
             continue;
index 16b35151c915784edb88c319bb192d51f8e0c71e..315cb24e45b05ca83cf3d01634a9721c826a4558 100644 (file)
@@ -379,7 +379,7 @@ MagickExport MagickBooleanType ClutImage(Image *image,const Image *clut_image,
       PixelTrait
         traits;
 
-      if (GetPixelWriteMask(image,q) == QuantumRange)
+      if (GetPixelReadMask(image,q) == 0)
         {
           q+=GetPixelChannels(image);
           continue;
@@ -1233,7 +1233,7 @@ MagickExport MagickBooleanType ContrastStretchImage(Image *image,
       register ssize_t
         j;
 
-      if (GetPixelWriteMask(image,q) == QuantumRange)
+      if (GetPixelReadMask(image,q) == 0)
         {
           q+=GetPixelChannels(image);
           continue;
@@ -1415,7 +1415,7 @@ MagickExport Image *EnhanceImage(const Image *image,ExceptionInfo *exception)
       register const Quantum
         *magick_restrict r;
 
-      if (GetPixelWriteMask(image,p) == QuantumRange)
+      if (GetPixelReadMask(image,p) == 0)
         {
           SetPixelBackgoundColor(enhance_image,q);
           p+=GetPixelChannels(image);
@@ -1703,7 +1703,7 @@ MagickExport MagickBooleanType EqualizeImage(Image *image,
       register ssize_t
         j;
 
-      if (GetPixelWriteMask(image,q) == QuantumRange)
+      if (GetPixelReadMask(image,q) == 0)
         {
           q+=GetPixelChannels(image);
           continue;
@@ -1885,7 +1885,7 @@ MagickExport MagickBooleanType GammaImage(Image *image,const double gamma,
       register ssize_t
         j;
 
-      if (GetPixelWriteMask(image,q) == QuantumRange)
+      if (GetPixelReadMask(image,q) == 0)
         {
           q+=GetPixelChannels(image);
           continue;
@@ -2024,7 +2024,7 @@ MagickExport MagickBooleanType GrayscaleImage(Image *image,
         red,
         intensity;
 
-      if (GetPixelWriteMask(image,q) == QuantumRange)
+      if (GetPixelReadMask(image,q) == 0)
         {
           q+=GetPixelChannels(image);
           continue;
@@ -2458,7 +2458,7 @@ MagickExport MagickBooleanType LevelImage(Image *image,const double black_point,
       register ssize_t
         j;
 
-      if (GetPixelWriteMask(image,q) == QuantumRange)
+      if (GetPixelReadMask(image,q) == 0)
         {
           q+=GetPixelChannels(image);
           continue;
@@ -2614,7 +2614,7 @@ MagickExport MagickBooleanType LevelizeImage(Image *image,
       register ssize_t
         j;
 
-      if (GetPixelWriteMask(image,q) == QuantumRange)
+      if (GetPixelReadMask(image,q) == 0)
         {
           q+=GetPixelChannels(image);
           continue;
@@ -2707,8 +2707,8 @@ MagickExport MagickBooleanType LevelImageColors(Image *image,
   if (image->debug != MagickFalse)
     (void) LogMagickEvent(TraceEvent,GetMagickModule(),"%s",image->filename);
   if ((IsGrayColorspace(image->colorspace) != MagickFalse) &&
-      ((IsGrayColorspace(black_color->colorspace) != MagickFalse) ||
-       (IsGrayColorspace(white_color->colorspace) != MagickFalse)))
+      ((IsGrayColorspace(black_color->colorspace) == MagickFalse) ||
+       (IsGrayColorspace(white_color->colorspace) == MagickFalse)))
     (void) SetImageColorspace(image,sRGBColorspace,exception);
   status=MagickTrue;
   if (invert == MagickFalse)
@@ -3317,11 +3317,6 @@ MagickExport MagickBooleanType ModulateImage(Image *image,const char *modulate,
         green,
         red;
 
-      if (GetPixelWriteMask(image,q) == QuantumRange)
-        {
-          q+=GetPixelChannels(image);
-          continue;
-        }
       red=(double) GetPixelRed(image,q);
       green=(double) GetPixelGreen(image,q);
       blue=(double) GetPixelBlue(image,q);
@@ -3504,7 +3499,7 @@ MagickExport MagickBooleanType NegateImage(Image *image,
           register ssize_t
             j;
 
-          if ((GetPixelWriteMask(image,q) == QuantumRange) ||
+          if ((GetPixelReadMask(image,q) == 0) ||
               IsPixelGray(image,q) != MagickFalse)
             {
               q+=GetPixelChannels(image);
@@ -3568,7 +3563,7 @@ MagickExport MagickBooleanType NegateImage(Image *image,
       register ssize_t
         j;
 
-      if (GetPixelWriteMask(image,q) == QuantumRange)
+      if (GetPixelReadMask(image,q) == 0)
         {
           q+=GetPixelChannels(image);
           continue;
@@ -3872,7 +3867,7 @@ MagickExport MagickBooleanType SigmoidalContrastImage(Image *image,
       register ssize_t
         i;
 
-      if (GetPixelWriteMask(image,q) == QuantumRange)
+      if (GetPixelReadMask(image,q) == 0)
         {
           q+=GetPixelChannels(image);
           continue;
index b06d3cd3818f7e2724b385dac869c1ed4f96bc4f..09d7a2a7a07ee650cc0366820c7f79e2299dc822 100644 (file)
@@ -372,7 +372,7 @@ MagickExport Image *AddNoiseImage(const Image *image,const NoiseType noise_type,
             (noise_traits == UndefinedPixelTrait))
           continue;
         if (((noise_traits & CopyPixelTrait) != 0) ||
-            (GetPixelWriteMask(image,p) == QuantumRange))
+            (GetPixelReadMask(image,p) == 0))
           {
             SetPixelChannel(noise_image,channel,p[i],q);
             continue;
@@ -780,7 +780,7 @@ MagickExport Image *ColorizeImage(const Image *image,const char *blend,
         if (traits == UndefinedPixelTrait)
           continue;
         if (((traits & CopyPixelTrait) != 0) ||
-            (GetPixelWriteMask(colorize_image,q) == QuantumRange))
+            (GetPixelReadMask(colorize_image,q) == 0))
           continue;
         SetPixelChannel(colorize_image,(PixelChannel) i,ClampToQuantum(
           Colorize(q[i],GetPixelInfoChannel(&blend_percentage,(PixelChannel) i),
@@ -3170,7 +3170,7 @@ MagickExport Image *FxImage(const Image *image,const char *expression,
             (fx_traits == UndefinedPixelTrait))
           continue;
         if (((fx_traits & CopyPixelTrait) != 0) ||
-            (GetPixelWriteMask(image,p) == QuantumRange))
+            (GetPixelReadMask(image,p) == 0))
           {
             SetPixelChannel(fx_image,channel,p[i],q);
             continue;
@@ -3356,7 +3356,7 @@ MagickExport Image *ImplodeImage(const Image *image,const double amount,
       /*
         Determine if the pixel is within an ellipse.
       */
-      if (GetPixelWriteMask(image,p) == QuantumRange)
+      if (GetPixelReadMask(image,p) == 0)
         {
           SetPixelBackgoundColor(implode_image,q);
           p+=GetPixelChannels(image);
@@ -3600,7 +3600,7 @@ MagickExport Image *MorphImages(const Image *image,const size_t number_frames,
                 (morph_traits == UndefinedPixelTrait))
               continue;
             if (((morph_traits & CopyPixelTrait) != 0) ||
-                (GetPixelWriteMask(morph_images,p) == QuantumRange))
+                (GetPixelReadMask(morph_images,p) == 0))
               {
                 SetPixelChannel(morph_image,channel,p[i],q);
                 continue;
@@ -4547,7 +4547,7 @@ MagickExport Image *SketchImage(const Image *image,const double radius,
       register ssize_t
         i;
 
-      if (GetPixelWriteMask(random_image,q) == QuantumRange)
+      if (GetPixelReadMask(random_image,q) == 0)
         {
           q+=GetPixelChannels(random_image);
           continue;
@@ -4711,7 +4711,7 @@ MagickExport MagickBooleanType SolarizeImage(Image *image,
       register ssize_t
         i;
 
-      if (GetPixelWriteMask(image,q) == QuantumRange)
+      if (GetPixelReadMask(image,q) == 0)
         {
           q+=GetPixelChannels(image);
           continue;
@@ -5201,7 +5201,7 @@ MagickExport Image *SwirlImage(const Image *image,double degrees,
       /*
         Determine if the pixel is within an ellipse.
       */
-      if (GetPixelWriteMask(image,p) == QuantumRange)
+      if (GetPixelReadMask(image,p) == 0)
         {
           SetPixelBackgoundColor(swirl_image,q);
           p+=GetPixelChannels(image);
@@ -5437,7 +5437,7 @@ MagickExport Image *TintImage(const Image *image,const char *blend,
             (tint_traits == UndefinedPixelTrait))
           continue;
         if (((tint_traits & CopyPixelTrait) != 0) ||
-            (GetPixelWriteMask(image,p) == QuantumRange))
+            (GetPixelReadMask(image,p) == 0))
           {
             SetPixelChannel(tint_image,channel,p[i],q);
             continue;
@@ -5866,7 +5866,7 @@ MagickExport Image *WaveletDenoiseImage(const Image *image,
     ThrowImageException(ResourceLimitError,"MemoryAllocationFailed");
   pixels_info=AcquireVirtualMemory(3*image->columns,image->rows*
     sizeof(*pixels));
-  kernel=(float *) AcquireQuantumMemory(MagickMax(image->rows,image->columns)+1,
+  kernel=(float *) AcquireQuantumMemory(MagickMax(image->rows,image->columns),
     GetOpenMPMaximumThreads()*sizeof(*kernel));
   if ((pixels_info == (MemoryInfo *) NULL) || (kernel == (float *) NULL))
     {
index 89905349e7428f7343f0e730db7608498ecbdb03..43c406486f89f13b360754de5a4e9bf20996a36c 100644 (file)
@@ -576,7 +576,7 @@ MagickExport Image *AppendImages(const Image *images,
       GetPixelInfo(next,&pixel);
       for (x=0; x < (ssize_t) next->columns; x++)
       {
-        if (GetPixelWriteMask(next,p) == QuantumRange)
+        if (GetPixelReadMask(next,p) == 0)
           {
             SetPixelBackgoundColor(append_image,q);
             p+=GetPixelChannels(next);
@@ -1818,7 +1818,7 @@ MagickExport MagickBooleanType IsHighDynamicRangeImage(const Image *image,
       register ssize_t
         i;
 
-      if (GetPixelWriteMask(image,p) == QuantumRange)
+      if (GetPixelReadMask(image,p) == 0)
         {
           p+=GetPixelChannels(image);
           continue;
@@ -2970,7 +2970,7 @@ MagickExport MagickBooleanType SetImageAlpha(Image *image,const Quantum alpha,
       }
     for (x=0; x < (ssize_t) image->columns; x++)
     {
-      if (GetPixelWriteMask(image,q) != QuantumRange)
+      if (GetPixelReadMask(image,q) != 0)
         SetPixelAlpha(image,alpha,q);
       q+=GetPixelChannels(image);
     }
@@ -3084,12 +3084,12 @@ MagickExport MagickBooleanType SetImageMask(Image *image,const PixelMask type,
       {
         case WritePixelMask:
         {
-          SetPixelWriteMask(image,ClampToQuantum(intensity),q);
+          SetPixelWriteMask(image,ClampToQuantum(QuantumRange-intensity),q);
           break;
         }
         default:
         {
-          SetPixelReadMask(image,ClampToQuantum(intensity),q);
+          SetPixelReadMask(image,ClampToQuantum(QuantumRange-intensity),q);
           break;
         }
       }
index 67cb64b95686162f3df99c4fca60395268306376..f53f00a50ad1f01a9f6565892b5d69122b7cc6ef 100644 (file)
@@ -156,8 +156,8 @@ static inline KernelInfo *LastKernelInfo(KernelInfo *kernel)
 %  shape.  However at least one non-nan value must be provided for correct
 %  working of a kernel.
 %
-%  The returned kernel should be freed using the DestroyKernelInfo method when
-%  you are finished with it.  Do not free this memory yourself.
+%  The returned kernel should be freed using the DestroyKernelInfo() when you
+%  are finished with it.  Do not free this memory yourself.
 %
 %  Input kernel defintion strings can consist of any of three types.
 %
@@ -551,7 +551,7 @@ MagickExport KernelInfo *AcquireKernelInfo(const char *kernel_string,
 %                                                                             %
 %                                                                             %
 %                                                                             %
-+     A c q u i r e K e r n e l B u i l t I n                                 %
+%     A c q u i r e K e r n e l B u i l t I n                                 %
 %                                                                             %
 %                                                                             %
 %                                                                             %
@@ -2712,7 +2712,7 @@ static ssize_t MorphologyPrimitive(const Image *image,Image *morphology_image,
                 (morphology_traits == UndefinedPixelTrait))
               continue;
             if (((traits & CopyPixelTrait) != 0) ||
-                (GetPixelWriteMask(image,p+center) == QuantumRange))
+                (GetPixelReadMask(image,p+center) == 0))
               {
                 SetPixelChannel(morphology_image,channel,p[center+i],q);
                 continue;
@@ -2863,7 +2863,7 @@ static ssize_t MorphologyPrimitive(const Image *image,Image *morphology_image,
             (morphology_traits == UndefinedPixelTrait))
           continue;
         if (((traits & CopyPixelTrait) != 0) ||
-            (GetPixelWriteMask(image,p+center) == QuantumRange))
+            (GetPixelReadMask(image,p+center) == 0))
           {
             SetPixelChannel(morphology_image,channel,p[center+i],q);
             continue;
@@ -3344,7 +3344,7 @@ static ssize_t MorphologyPrimitiveDirect(Image *image,
         if (traits == UndefinedPixelTrait)
           continue;
         if (((traits & CopyPixelTrait) != 0) ||
-            (GetPixelWriteMask(image,p+center) == QuantumRange))
+            (GetPixelReadMask(image,p+center) == 0))
           continue;
         pixels=p;
         pixel=(double) QuantumRange;
@@ -3505,7 +3505,7 @@ static ssize_t MorphologyPrimitiveDirect(Image *image,
         if (traits == UndefinedPixelTrait)
           continue;
         if (((traits & CopyPixelTrait) != 0) ||
-            (GetPixelWriteMask(image,p+center) == QuantumRange))
+            (GetPixelReadMask(image,p+center) == 0))
           continue;
         pixels=p;
         pixel=(double) QuantumRange;
index 17652b7efbef60ea932e1d9bce541d6b2578afc3..16089762277e489ca8deaefd49c1aec43af37ed1 100644 (file)
@@ -626,7 +626,7 @@ MagickPrivate double NTElapsedTime(void)
   SystemTimeToFileTime(&system_time,&elapsed_time.filetime);
   return((double) 1.0e-7*elapsed_time.filetime64);
 }
-\f
+
 /*
 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
 %                                                                             %
@@ -679,6 +679,7 @@ MagickPrivate double NTErf(double x)
   return(sign*y);
 }
 \f
+\f
 /*
 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
 %                                                                             %
@@ -1749,7 +1750,6 @@ MagickPrivate DIR *NTOpenDirectory(const char *path)
     length;
 
   wchar_t
-    directory_separator[MagickPathExtent],
     file_specification[MagickPathExtent];
 
   assert(path != (const char *) NULL);
@@ -1757,11 +1757,8 @@ MagickPrivate DIR *NTOpenDirectory(const char *path)
     MagickPathExtent);
   if (length == 0)
     return((DIR *) NULL);
-  length=MultiByteToWideChar(CP_UTF8,0,DirectorySeparator,-1,
-    directory_separator,strlen(DirectorySeparator)+1);
-  if (length == 0)
-    return((DIR *) NULL);
-  if (wcsncat(file_specification,directory_separator,MagickPathExtent-wcslen(file_specification)-1) == (wchar_t*) NULL)
+  if(wcsncat(file_specification,(const wchar_t*) DirectorySeparator,
+       MagickPathExtent-wcslen(file_specification)-1) == (wchar_t*) NULL)
     return((DIR *) NULL);
   entry=(DIR *) AcquireMagickMemory(sizeof(DIR));
   if (entry != (DIR *) NULL)
index 0cf2002f5f7fff435f978f6d8c10a007ea317a46..da23984ef9af38cb7d4e4803f1a01ebde7f405e4 100644 (file)
@@ -1235,71 +1235,25 @@ static void CacheOpenCLKernel(MagickCLDevice device,char *filename,
   ExceptionInfo *exception)
 {
   cl_uint
-    num_devices,
     status;
 
   size_t
-    i,
-    size,
-    *program_sizes;
+    binaryProgramSize;
+
+  unsigned char
+    *binaryProgram;
 
   status=openCL_library->clGetProgramInfo(device->program,
-    CL_PROGRAM_NUM_DEVICES,sizeof(cl_uint),&num_devices,NULL);
+    CL_PROGRAM_BINARY_SIZES,sizeof(size_t),&binaryProgramSize,NULL);
   if (status != CL_SUCCESS)
     return;
-  size=num_devices*sizeof(*program_sizes);
-  program_sizes=(size_t*) AcquireMagickMemory(size);
-  if (program_sizes == (size_t*) NULL)
-    return;
+
+  binaryProgram=(unsigned char*) AcquireMagickMemory(binaryProgramSize);
   status=openCL_library->clGetProgramInfo(device->program,
-    CL_PROGRAM_BINARY_SIZES,size,program_sizes,NULL);
+    CL_PROGRAM_BINARIES,sizeof(unsigned char*),&binaryProgram,NULL);
   if (status == CL_SUCCESS)
-    {
-      size_t
-        binary_program_size;
-
-      unsigned char
-        **binary_program;
-
-      binary_program_size=num_devices*sizeof(*binary_program);
-      binary_program=(unsigned char **) AcquireMagickMemory(
-        binary_program_size);
-      for (i = 0; i < num_devices; i++)
-        binary_program[i]=AcquireQuantumMemory(MagickMax(*(program_sizes+i),1),
-          sizeof(**binary_program));
-      status=openCL_library->clGetProgramInfo(device->program,
-        CL_PROGRAM_BINARIES,binary_program_size,binary_program,NULL);
-      if (status == CL_SUCCESS)
-        {
-          for (i = 0; i < num_devices; i++)
-          {
-            int
-              file;
-
-            size_t
-              program_size;
-
-            program_size=*(program_sizes+i);
-            if (program_size < 1)
-              continue;
-            file=open_utf8(filename,O_WRONLY | O_CREAT | O_BINARY,S_MODE);
-            if (file != -1)
-              {
-                write(file,binary_program[i],program_size);
-                file=close(file);
-              }
-            else
-              (void) ThrowMagickException(exception,GetMagickModule(),
-                DelegateWarning,"Saving kernel failed.","`%s'",filename);
-            break;
-          }
-        }
-      for (i = 0; i < num_devices; i++)
-        binary_program[i]=(unsigned char *) RelinquishMagickMemory(
-          binary_program[i]);
-      binary_program=(unsigned char **) RelinquishMagickMemory(binary_program);
-    }
-  program_sizes=(size_t *) RelinquishMagickMemory(program_sizes);
+    (void) BlobToFile(filename,binaryProgram,binaryProgramSize,exception);
+  binaryProgram=(unsigned char *) RelinquishMagickMemory(binaryProgram);
 }
 
 static MagickBooleanType LoadCachedOpenCLKernel(MagickCLDevice device,
index a4fe6273bc9357847b7759bb46b75a096b51448d..3910fee3ebf29bdf8c2926e6c4d825616e75a3fc 100644 (file)
@@ -675,8 +675,8 @@ static const OptionInfo
     { "+render", 0L, DrawInfoOptionFlag, MagickFalse },
     { "+resample", 1L, DeprecateOptionFlag, MagickTrue },
     { "-resample", 1L, SimpleOperatorFlag, MagickFalse },
-    { "-respect-parentheses", 0L, ImageInfoOptionFlag, MagickFalse },
-    { "+respect-parentheses", 0L, ImageInfoOptionFlag, MagickFalse },
+    { "-respect-parenthesis", 0L, ImageInfoOptionFlag, MagickFalse },
+    { "+respect-parenthesis", 0L, ImageInfoOptionFlag, MagickFalse },
     { "+reverse", 0L, DeprecateOptionFlag | FireOptionFlag, MagickTrue },
     { "-reverse", 0L, ListOperatorFlag | FireOptionFlag, MagickFalse },
     { "+roll", 1L, DeprecateOptionFlag, MagickTrue },
index fe62bb80fcd4847c9ad2cc8fb8dbbe7d6ec88066..1a1125a37b201d73e371769380092cef68ea2b89 100644 (file)
@@ -830,7 +830,7 @@ MagickExport Image *OilPaintImage(const Image *image,const double radius,
             (paint_traits == UndefinedPixelTrait))
           continue;
         if (((paint_traits & CopyPixelTrait) != 0) ||
-            (GetPixelWriteMask(linear_image,p) == QuantumRange))
+            (GetPixelReadMask(linear_image,p) == 0))
           {
             SetPixelChannel(paint_image,channel,p[center+i],q);
             continue;
@@ -971,11 +971,6 @@ MagickExport MagickBooleanType OpaquePaintImage(Image *image,
     pixel=zero;
     for (x=0; x < (ssize_t) image->columns; x++)
     {
-      if (GetPixelWriteMask(image,q) == QuantumRange)
-        {
-          q+=GetPixelChannels(image);
-          continue;
-        }
       GetPixelInfoPixel(image,q,&pixel);
       if (IsFuzzyEquivalencePixelInfo(&pixel,&conform_target) != invert)
         SetPixelViaPixelInfo(image,&conform_fill,q);
index 1a32393b3b433cbde39a318264beaa67e2d61697..2a80dc2a9a05e1e1ddc71719530053fed283bf42 100644 (file)
@@ -213,7 +213,7 @@ MagickExport MagickBooleanType CloneImageProperties(Image *image,
 %
 %  DefineImageProperty() associates an assignment string of the form
 %  "key=value" with an artifact or options. It is equivelent to
-%  SetImageProperty().
+%  SetImageProperty()
 %
 %  The format of the DefineImageProperty method is:
 %
@@ -667,7 +667,7 @@ static MagickBooleanType Get8BIMProperty(const Image *image,const char *key,
     count=(ssize_t) ReadPropertyMSBLong(&info,&length);
     if ((count < 0) || ((size_t) count > length))
       {
-        length=0;
+        length=0; 
         continue;
       }
     if ((*name != '\0') && (*name != '#'))
@@ -2792,13 +2792,6 @@ MagickExport const char *GetMagickProperty(ImageInfo *image_info,
             (void) ConcatenateMagickString(value,"a",MagickPathExtent);
           break;
         }
-      if (LocaleCompare("colors",property) == 0)
-        {
-          WarnNoImageReturn("\"%%[%s]\"",property);
-          (void) FormatLocaleString(value,MagickPathExtent,"%.20g",(double)
-            GetNumberColors(image,(FILE *) NULL,exception));
-          break;
-        }
       if (LocaleCompare("colorspace",property) == 0)
         {
           WarnNoImageReturn("\"%%[%s]\"",property);
@@ -2814,13 +2807,6 @@ MagickExport const char *GetMagickProperty(ImageInfo *image_info,
             image->compose);
           break;
         }
-      if (LocaleCompare("compression",property) == 0)
-        {
-          WarnNoImageReturn("\"%%[%s]\"",property);
-          string=CommandOptionToMnemonic(MagickCompressOptions,(ssize_t)
-            image->compression);
-          break;
-        }
       if (LocaleCompare("copyright",property) == 0)
         {
           (void) CopyMagickString(value,GetMagickCopyright(),MagickPathExtent);
@@ -2900,13 +2886,6 @@ MagickExport const char *GetMagickProperty(ImageInfo *image_info,
           string=image->filename;
           break;
         }
-      if (LocaleCompare("interlace",property) == 0)
-        {
-          WarnNoImageReturn("\"%%[%s]\"",property);
-          string=CommandOptionToMnemonic(MagickInterlaceOptions,(ssize_t)
-            image->interlace);
-          break;
-        }
       break;
     }
     case 'k':
@@ -3052,26 +3031,8 @@ MagickExport const char *GetMagickProperty(ImageInfo *image_info,
         }
       break;
     }
-    case 'q':
-    {
-      if (LocaleCompare("quality",property) == 0)
-        {
-          WarnNoImageReturn("\"%%[%s]\"",property);
-          (void) FormatLocaleString(value,MagickPathExtent,"%.*g",
-            GetMagickPrecision(),(double) image->quality);
-          break;
-        }
-      break;
-    }
     case 'r':
     {
-      if (LocaleCompare("rendering-intent",property) == 0)
-        {
-          WarnNoImageReturn("\"%%[%s]\"",property);
-          string=CommandOptionToMnemonic(MagickIntentOptions,(ssize_t)
-            image->rendering_intent);
-          break;
-        }
       if (LocaleCompare("resolution.x",property) == 0)
         {
           WarnNoImageReturn("\"%%[%s]\"",property);
@@ -4001,7 +3962,7 @@ MagickExport MagickBooleanType SetImageProperty(Image *image,
     {
       /*
         Do not 'set' single letter properties - read only shorthand.
-      */
+       */
       (void) ThrowMagickException(exception,GetMagickModule(),OptionError,
         "SetReadOnlyProperty","`%s'",property);
       return(MagickFalse);
@@ -4047,11 +4008,6 @@ MagickExport MagickBooleanType SetImageProperty(Image *image,
             "SetReadOnlyProperty","`%s'",property);
           return(MagickFalse);
         }
-      if (LocaleCompare("colors",property) == 0)
-        {
-          image->colors=GetNumberColors(image,(FILE *) NULL,exception);
-          return(MagickTrue);
-        }
       if (LocaleCompare("colorspace",property) == 0)
         {
           ssize_t
@@ -4222,6 +4178,18 @@ MagickExport MagickBooleanType SetImageProperty(Image *image,
           image->intensity=(PixelIntensityMethod) intensity;
           return(MagickTrue);
         }
+      if (LocaleCompare("intent",property) == 0)
+        {
+          ssize_t
+            rendering_intent;
+
+          rendering_intent=ParseCommandOption(MagickIntentOptions,MagickFalse,
+            value);
+          if (rendering_intent < 0)
+            return(MagickFalse); /* FUTURE: value exception?? */
+          image->rendering_intent=(RenderingIntent) rendering_intent;
+          return(MagickTrue);
+        }
       if (LocaleCompare("interpolate",property) == 0)
         {
           ssize_t
index 248d89ca6669a8b9924a8a8d4a262a70357801fe..48b456799b02876478144fea199ff70174212e8d 100644 (file)
@@ -2189,7 +2189,6 @@ MagickExport MagickBooleanType GetImageQuantizeError(Image *image,
     area,
     beta,
     distance,
-    gamma,
     maximum_error,
     mean_error,
     mean_error_per_pixel;
@@ -2256,10 +2255,10 @@ MagickExport MagickBooleanType GetImageQuantizeError(Image *image,
     }
   }
   image_view=DestroyCacheView(image_view);
-  gamma=PerceptibleReciprocal(area);
-  image->error.mean_error_per_pixel=gamma*mean_error_per_pixel;
-  image->error.normalized_mean_error=gamma*QuantumScale*QuantumScale*mean_error;
-  image->error.normalized_maximum_error=QuantumScale*maximum_error;
+  image->error.mean_error_per_pixel=(double) mean_error_per_pixel/area;
+  image->error.normalized_mean_error=(double) QuantumScale*QuantumScale*
+    mean_error/area;
+  image->error.normalized_maximum_error=(double) QuantumScale*maximum_error;
   return(MagickTrue);
 }
 \f
index 8e5568bda7348e08ee37b5bdc8ab3387bc8c5aa8..0f831597592fb541982e54875d121242680c88f9 100644 (file)
@@ -3920,7 +3920,7 @@ MagickExport size_t ExportQuantumPixels(const Image *image,
         register ssize_t
           i;
 
-        if (GetPixelWriteMask(image,q) == QuantumRange)
+        if (GetPixelReadMask(image,q) == 0)
           {
             q+=GetPixelChannels(image);
             continue;
index 75bd06c0f54da34de85d19abf2c6ef2ea6ede0d8..b3cdc7dc3263ef74b816c7da107953f55309ab30 100644 (file)
@@ -4280,7 +4280,7 @@ MagickExport size_t ImportQuantumPixels(const Image *image,
         register ssize_t
           i;
 
-        if (GetPixelWriteMask(image,q) == QuantumRange)
+        if (GetPixelReadMask(image,q) == 0)
           {
             q+=GetPixelChannels(image);
             continue;
index 508d0c37b865607cabecf41056741c8c54b8c143..d48cf88bca770bf0217ad0c8b461168162fa3d8c 100644 (file)
@@ -1741,7 +1741,7 @@ MagickExport Image *InterpolativeResizeImage(const Image *image,
       register ssize_t
         i;
 
-      if (GetPixelWriteMask(resize_image,q) == QuantumRange)
+      if (GetPixelReadMask(resize_image,q) == 0)
         {
           q+=GetPixelChannels(resize_image);
           continue;
@@ -2538,7 +2538,7 @@ static MagickBooleanType HorizontalFilter(const ResizeFilter *resize_filter,
             (resize_traits == UndefinedPixelTrait))
           continue;
         if (((resize_traits & CopyPixelTrait) != 0) ||
-            (GetPixelWriteMask(resize_image,q) == QuantumRange))
+            (GetPixelReadMask(resize_image,q) == 0))
           {
             j=(ssize_t) (MagickMin(MagickMax(bisect,(double) start),(double)
               stop-1.0)+0.5);
@@ -2754,7 +2754,7 @@ static MagickBooleanType VerticalFilter(const ResizeFilter *resize_filter,
             (resize_traits == UndefinedPixelTrait))
           continue;
         if (((resize_traits & CopyPixelTrait) != 0) ||
-            (GetPixelWriteMask(resize_image,q) == QuantumRange))
+            (GetPixelReadMask(resize_image,q) == 0))
           {
             j=(ssize_t) (MagickMin(MagickMax(bisect,(double) start),(double)
               stop-1.0)+0.5);
@@ -3089,7 +3089,7 @@ MagickExport Image *SampleImage(const Image *image,const size_t columns,
       register ssize_t
         i;
 
-      if (GetPixelWriteMask(sample_image,q) == QuantumRange)
+      if (GetPixelReadMask(sample_image,q) == 0)
         {
           q+=GetPixelChannels(sample_image);
           continue;
@@ -3302,7 +3302,7 @@ MagickExport Image *ScaleImage(const Image *image,const size_t columns,
           }
         for (x=0; x < (ssize_t) image->columns; x++)
         {
-          if (GetPixelWriteMask(image,p) == QuantumRange)
+          if (GetPixelReadMask(image,p) == 0)
             {
               p+=GetPixelChannels(image);
               continue;
@@ -3345,7 +3345,7 @@ MagickExport Image *ScaleImage(const Image *image,const size_t columns,
                 }
               for (x=0; x < (ssize_t) image->columns; x++)
               {
-                if (GetPixelWriteMask(image,p) == QuantumRange)
+                if (GetPixelReadMask(image,p) == 0)
                   {
                     p+=GetPixelChannels(image);
                     continue;
@@ -3389,7 +3389,7 @@ MagickExport Image *ScaleImage(const Image *image,const size_t columns,
               }
             for (x=0; x < (ssize_t) image->columns; x++)
             {
-              if (GetPixelWriteMask(image,p) == QuantumRange)
+              if (GetPixelReadMask(image,p) == 0)
                 {
                   p+=GetPixelChannels(image);
                   continue;
@@ -3437,7 +3437,7 @@ MagickExport Image *ScaleImage(const Image *image,const size_t columns,
         */
         for (x=0; x < (ssize_t) scale_image->columns; x++)
         {
-          if (GetPixelWriteMask(scale_image,q) == QuantumRange)
+          if (GetPixelReadMask(scale_image,q) == 0)
             {
               q+=GetPixelChannels(scale_image);
               continue;
@@ -3533,7 +3533,7 @@ MagickExport Image *ScaleImage(const Image *image,const size_t columns,
       */
       for (x=0; x < (ssize_t) scale_image->columns; x++)
       {
-        if (GetPixelWriteMask(scale_image,q) == QuantumRange)
+        if (GetPixelReadMask(scale_image,q) == 0)
           {
             q+=GetPixelChannels(scale_image);
             continue;
index d5600610d3f03053857f1a04e69211cd4cad27da..5d866b9ebaa48d1c9f1ebfa08cc24ba1b23080f2 100644 (file)
@@ -830,7 +830,7 @@ MagickExport Image *IntegralRotateImage(const Image *image,size_t rotations,
               register ssize_t
                 i;
 
-              if (GetPixelWriteMask(image,tile_pixels) == QuantumRange)
+              if (GetPixelReadMask(image,tile_pixels) == 0)
                 {
                   tile_pixels-=width*GetPixelChannels(image);
                   q+=GetPixelChannels(rotate_image);
@@ -920,7 +920,7 @@ MagickExport Image *IntegralRotateImage(const Image *image,size_t rotations,
             i;
 
           q-=GetPixelChannels(rotate_image);
-          if (GetPixelWriteMask(image,p) == QuantumRange)
+          if (GetPixelReadMask(image,p) == 0)
             {
               p+=GetPixelChannels(image);
               continue;
@@ -1043,7 +1043,7 @@ MagickExport Image *IntegralRotateImage(const Image *image,size_t rotations,
               register ssize_t
                 i;
 
-              if (GetPixelWriteMask(image,tile_pixels) == QuantumRange)
+              if (GetPixelReadMask(image,tile_pixels) == 0)
                 {
                   tile_pixels+=width*GetPixelChannels(image);
                   q+=GetPixelChannels(rotate_image);
index c0d803df1699269e61aa0a4fc5681a7589fae87a..7051dbb383cedacb96acf1fc0605b2f41fad3adb 100644 (file)
@@ -520,7 +520,7 @@ MagickExport MagickBooleanType SignatureImage(Image *image,
       register ssize_t
         i;
 
-      if (GetPixelWriteMask(image,p) == QuantumRange)
+      if (GetPixelReadMask(image,p) == 0)
         {
           p+=GetPixelChannels(image);
           continue;
index 6be31f7b26fa076592c46d9fd5ad59e2c4fd7629..7e772cd66ac866f32fb9c1cf9d6ff298df51811c 100644 (file)
@@ -315,7 +315,7 @@ static void BalanceSplayTree(SplayTreeInfo *splay_tree)
 %  The format of the CloneSplayTree method is:
 %
 %      SplayTreeInfo *CloneSplayTree(SplayTreeInfo *splay_tree,
-%        void *(*clone_key)(void *),void *(*clone_value)(void *))
+%        void *(*clone_key)(void *),void *(*cline_value)(void *))
 %
 %  A description of each parameter follows:
 %
index 145b817d45efed9f854e0ac4410ac7377726c5da..20558747fb5736ca1d554ffdfcbc87a380649cff 100644 (file)
@@ -1115,8 +1115,7 @@ MagickExport MagickBooleanType GetImageEntropy(const Image *image,
   double *entropy,ExceptionInfo *exception)
 {
   double
-    area,
-    gamma;
+    area;
 
   ChannelStatistics
     *channel_statistics;
@@ -1146,11 +1145,12 @@ MagickExport MagickBooleanType GetImageEntropy(const Image *image,
       channel_statistics[i].entropy;
     area++;
   }
-  gamma=PerceptibleReciprocal(area);
-  channel_statistics[CompositePixelChannel].entropy*=gamma;
-  gamma=PerceptibleReciprocal(area-1.0);
-  channel_statistics[CompositePixelChannel].standard_deviation=
-    sqrt(gamma*channel_statistics[CompositePixelChannel].standard_deviation);
+  if (area > MagickEpsilon)
+    {
+      channel_statistics[CompositePixelChannel].entropy/=area;
+      channel_statistics[CompositePixelChannel].standard_deviation=
+        sqrt(channel_statistics[CompositePixelChannel].standard_deviation/area);
+    }
   *entropy=channel_statistics[CompositePixelChannel].entropy;
   channel_statistics=(ChannelStatistics *) RelinquishMagickMemory(
     channel_statistics);
@@ -1378,8 +1378,7 @@ MagickExport MagickBooleanType GetImageMean(const Image *image,double *mean,
   double *standard_deviation,ExceptionInfo *exception)
 {
   double
-    area,
-    gamma;
+    area;
 
   ChannelStatistics
     *channel_statistics;
@@ -1411,11 +1410,12 @@ MagickExport MagickBooleanType GetImageMean(const Image *image,double *mean,
       channel_statistics[i].mean;
     area++;
   }
-  gamma=PerceptibleReciprocal(area);
-  channel_statistics[CompositePixelChannel].mean*=gamma;
-  gamma=PerceptibleReciprocal(area-1.0);
-  channel_statistics[CompositePixelChannel].standard_deviation=
-    sqrt(gamma*channel_statistics[CompositePixelChannel].standard_deviation);
+  if (area > MagickEpsilon)
+    {
+      channel_statistics[CompositePixelChannel].mean/=area;
+      channel_statistics[CompositePixelChannel].standard_deviation=
+        sqrt(channel_statistics[CompositePixelChannel].standard_deviation/area);
+    }
   *mean=channel_statistics[CompositePixelChannel].mean;
   *standard_deviation=
     channel_statistics[CompositePixelChannel].standard_deviation;
index 8f8c1fa4323906807ce5c7b8a6abc0b3a3eda074..a23b832f50165b08dd86d82e6be1facffe73659d 100644 (file)
@@ -274,7 +274,7 @@ MagickExport Image *AdaptiveThresholdImage(const Image *image,
           (threshold_traits == UndefinedPixelTrait))
         continue;
       if (((threshold_traits & CopyPixelTrait) != 0) ||
-          (GetPixelWriteMask(image,p) == QuantumRange))
+          (GetPixelReadMask(image,p) == 0))
         {
           SetPixelChannel(threshold_image,channel,p[center+i],q);
           continue;
@@ -309,7 +309,7 @@ MagickExport Image *AdaptiveThresholdImage(const Image *image,
             (threshold_traits == UndefinedPixelTrait))
           continue;
         if (((threshold_traits & CopyPixelTrait) != 0) ||
-            (GetPixelWriteMask(image,p) == QuantumRange))
+            (GetPixelReadMask(image,p) == 0))
           {
             SetPixelChannel(threshold_image,channel,p[center+i],q);
             continue;
@@ -455,7 +455,7 @@ MagickExport MagickBooleanType BilevelImage(Image *image,const double threshold,
       register ssize_t
         i;
 
-      if (GetPixelWriteMask(image,q) == QuantumRange)
+      if (GetPixelReadMask(image,q) == 0)
         {
           q+=GetPixelChannels(image);
           continue;
@@ -620,7 +620,7 @@ MagickExport MagickBooleanType BlackThresholdImage(Image *image,
       register ssize_t
         i;
 
-      if (GetPixelWriteMask(image,q) == QuantumRange)
+      if (GetPixelReadMask(image,q) == 0)
         {
           q+=GetPixelChannels(image);
           continue;
@@ -756,7 +756,7 @@ MagickExport MagickBooleanType ClampImage(Image *image,ExceptionInfo *exception)
       register ssize_t
         i;
 
-      if (GetPixelWriteMask(image,q) == QuantumRange)
+      if (GetPixelReadMask(image,q) == 0)
         {
           q+=GetPixelChannels(image);
           continue;
@@ -1397,7 +1397,7 @@ MagickExport MagickBooleanType OrderedDitherImage(Image *image,
         n;
 
       n=0;
-      if (GetPixelWriteMask(image,q) == QuantumRange)
+      if (GetPixelReadMask(image,q) == 0)
         {
           q+=GetPixelChannels(image);
           continue;
@@ -1564,7 +1564,7 @@ MagickExport MagickBooleanType PerceptibleImage(Image *image,
       register ssize_t
         i;
 
-      if (GetPixelWriteMask(image,q) == QuantumRange)
+      if (GetPixelReadMask(image,q) == 0)
         {
           q+=GetPixelChannels(image);
           continue;
@@ -1701,7 +1701,7 @@ MagickExport MagickBooleanType RandomThresholdImage(Image *image,
       register ssize_t
         i;
 
-      if (GetPixelWriteMask(image,q) == QuantumRange)
+      if (GetPixelReadMask(image,q) == 0)
         {
           q+=GetPixelChannels(image);
           continue;
@@ -1875,7 +1875,7 @@ MagickExport MagickBooleanType WhiteThresholdImage(Image *image,
       register ssize_t
         i;
 
-      if (GetPixelWriteMask(image,q) == QuantumRange)
+      if (GetPixelReadMask(image,q) == 0)
         {
           q+=GetPixelChannels(image);
           continue;
index fac4b08ef3deb5bbcc8228a1c1e980ed9268a6b4..68fdcfd57bac9812ae00e46a038d03858b3116ed 100644 (file)
@@ -697,7 +697,7 @@ MagickExport Image *CropImage(const Image *image,const RectangleInfo *geometry,
       register ssize_t
         i;
 
-      if (GetPixelWriteMask(image,p) == QuantumRange)
+      if (GetPixelReadMask(image,p) == 0)
         {
           SetPixelBackgoundColor(crop_image,q);
           p+=GetPixelChannels(image);
@@ -1050,7 +1050,7 @@ MagickExport Image *ExcerptImage(const Image *image,
       register ssize_t
         i;
 
-      if (GetPixelWriteMask(image,p) == QuantumRange)
+      if (GetPixelReadMask(image,p) == 0)
         {
           SetPixelBackgoundColor(excerpt_image,q);
           p+=GetPixelChannels(image);
@@ -1248,7 +1248,7 @@ MagickExport Image *FlipImage(const Image *image,ExceptionInfo *exception)
       register ssize_t
         i;
 
-      if (GetPixelWriteMask(image,p) == QuantumRange)
+      if (GetPixelReadMask(image,p) == 0)
         {
           SetPixelBackgoundColor(flip_image,q);
           p+=GetPixelChannels(image);
@@ -1391,7 +1391,7 @@ MagickExport Image *FlopImage(const Image *image,ExceptionInfo *exception)
         i;
 
       q-=GetPixelChannels(flop_image);
-      if (GetPixelWriteMask(image,p) == QuantumRange)
+      if (GetPixelReadMask(image,p) == 0)
         {
           p+=GetPixelChannels(image);
           continue;
@@ -1517,7 +1517,7 @@ static MagickBooleanType CopyImageRegion(Image *destination,const Image *source,
       register ssize_t
         i;
 
-      if (GetPixelWriteMask(source,p) == QuantumRange)
+      if (GetPixelReadMask(source,p) == 0)
         {
           SetPixelBackgoundColor(destination,q);
           p+=GetPixelChannels(source);
@@ -1845,7 +1845,7 @@ MagickExport Image *SpliceImage(const Image *image,
       register ssize_t
         i;
 
-      if (GetPixelWriteMask(image,p) == QuantumRange)
+      if (GetPixelReadMask(image,p) == 0)
         {
           SetPixelBackgoundColor(splice_image,q);
           p+=GetPixelChannels(image);
@@ -1876,7 +1876,7 @@ MagickExport Image *SpliceImage(const Image *image,
       register ssize_t
         i;
 
-      if (GetPixelWriteMask(image,p) == QuantumRange)
+      if (GetPixelReadMask(image,p) == 0)
         {
           SetPixelBackgoundColor(splice_image,q);
           p+=GetPixelChannels(image);
@@ -1950,7 +1950,7 @@ MagickExport Image *SpliceImage(const Image *image,
       register ssize_t
         i;
 
-      if (GetPixelWriteMask(image,q) == QuantumRange)
+      if (GetPixelReadMask(image,q) == 0)
         {
           SetPixelBackgoundColor(splice_image,q);
           p+=GetPixelChannels(image);
@@ -1981,7 +1981,7 @@ MagickExport Image *SpliceImage(const Image *image,
       register ssize_t
         i;
 
-      if (GetPixelWriteMask(image,q) == QuantumRange)
+      if (GetPixelReadMask(image,q) == 0)
         {
           SetPixelBackgoundColor(splice_image,q);
           p+=GetPixelChannels(image);
@@ -2224,7 +2224,7 @@ MagickExport Image *TransposeImage(const Image *image,ExceptionInfo *exception)
       register ssize_t
         i;
 
-      if (GetPixelWriteMask(image,q) == QuantumRange)
+      if (GetPixelReadMask(image,q) == 0)
         {
           SetPixelBackgoundColor(transpose_image,q);
           p+=GetPixelChannels(image);
@@ -2373,7 +2373,7 @@ MagickExport Image *TransverseImage(const Image *image,ExceptionInfo *exception)
         i;
 
       q-=GetPixelChannels(transverse_image);
-      if (GetPixelWriteMask(image,p) == QuantumRange)
+      if (GetPixelReadMask(image,p) == 0)
         {
           p+=GetPixelChannels(image);
           continue;
index 9e4496138ff6eef1ad00011bdf4be255ecbd78b7..a139caad01e6dd36b70fbb90f333e7f63cbc9655 100644 (file)
@@ -1152,9 +1152,9 @@ MagickExport MagickBooleanType GetPathAttributes(const char *path,
 {
   MagickBooleanType
     status;
-
+  
   if (path == (const char *) NULL)
-    {
+    { 
       errno=EINVAL;
       return(MagickFalse);
     }
index 9d5ed53b1810d09057e867226f7a49686b7ca71a..dd0f193140dee66a392f572e21092e6486167e3c 100644 (file)
@@ -129,7 +129,7 @@ static MagickBooleanType CompareUsage(void)
       "-quality value       JPEG/MIFF/PNG compression level",
       "-quiet               suppress all warning messages",
       "-quantize colorspace reduce colors in this colorspace",
-      "-read-mask filename  associate a read mask with the image",
+      "-read-mask filename  associate a read mask with the image"
       "-regard-warnings     pay attention to warning messages",
       "-respect-parentheses settings remain in effect until parenthesis boundary",
       "-sampling-factor geometry",
@@ -350,11 +350,10 @@ WandExport MagickBooleanType CompareImagesCommand(ImageInfo *image_info,
             i++;
             if (i == (ssize_t) argc)
               ThrowCompareException(OptionError,"MissingArgument",option);
-            type=ParseCommandOption(MagickAlphaChannelOptions,MagickFalse,
-              argv[i]);
+            type=ParseCommandOption(MagickAlphaChannelOptions,MagickFalse,argv[i]);
             if (type < 0)
-              ThrowCompareException(OptionError,
-                "UnrecognizedAlphaChannelOption",argv[i]);
+              ThrowCompareException(OptionError,"UnrecognizedAlphaChannelOption",
+                argv[i]);
             break;
           }
         if (LocaleCompare("authenticate",option+1) == 0)
index 5cde542023694e40f50fae0c0faf1a9c39c66fe8..508c4c6f42dccf5881b7bc78d7092fd8b4ef2ecc 100644 (file)
@@ -1004,9 +1004,8 @@ WandExport MagickBooleanType ConvertImageCommand(ImageInfo *image_info,
               *clone_images,
               *clone_list;
             
-            if (k == 0)
-              clone_list=CloneImageList(image,exception);
-            else
+            clone_list=CloneImageList(image,exception);
+            if (k != 0)
               clone_list=CloneImageList(image_stack[k-1].image,exception);
             if (clone_list == (Image *) NULL)
               ThrowConvertException(ImageError,"ImageSequenceRequired",option);
@@ -2259,7 +2258,8 @@ WandExport MagickBooleanType ConvertImageCommand(ImageInfo *image_info,
                 ssize_t
                   noise;
 
-                noise=ParseCommandOption(MagickNoiseOptions,MagickFalse,argv[i]);
+                noise=ParseCommandOption(MagickNoiseOptions,MagickFalse,
+                  argv[i]);
                 if (noise < 0)
                   ThrowConvertException(OptionError,"UnrecognizedNoiseType",
                     argv[i]);
index 9ce3f272638d07fbd66c5468282a5b6ab588108d..e9fee7f10964f82c39a26425d131a4277933e04f 100644 (file)
@@ -367,7 +367,7 @@ static inline Image *GetImageCache(const ImageInfo *image_info,const char *path,
     key[MagickPathExtent];
 
   ExceptionInfo
-    *sansexception;
+    *sans_exception;
 
   Image
     *image;
@@ -380,9 +380,9 @@ static inline Image *GetImageCache(const ImageInfo *image_info,const char *path,
     cache.  Then return the image that is in the cache.
   */
   (void) FormatLocaleString(key,MagickPathExtent,"cache:%s",path);
-  sansexception=AcquireExceptionInfo();
-  image=(Image *) GetImageRegistry(ImageRegistryType,key,sansexception);
-  sansexception=DestroyExceptionInfo(sansexception);
+  sans_exception=AcquireExceptionInfo();
+  image=(Image *) GetImageRegistry(ImageRegistryType,key,sans_exception);
+  sans_exception=DestroyExceptionInfo(sans_exception);
   if (image != (Image *) NULL)
     return(image);
   read_info=CloneImageInfo(image_info);
@@ -2132,7 +2132,7 @@ WandExport MagickBooleanType MogrifyImage(ImageInfo *image_info,const int argc,
                 /*
                   Remove a mask.
                 */
-                (void) SetImageMask(*image,WritePixelMask,(Image *) NULL,
+                (void) SetImageMask(*image,ReadPixelMask,(Image *) NULL,
                   exception);
                 break;
               }
@@ -2142,7 +2142,7 @@ WandExport MagickBooleanType MogrifyImage(ImageInfo *image_info,const int argc,
             mask=GetImageCache(mogrify_info,argv[i+1],exception);
             if (mask == (Image *) NULL)
               break;
-            (void) SetImageMask(*image,WritePixelMask,mask,exception);
+            (void) SetImageMask(*image,ReadPixelMask,mask,exception);
             mask=DestroyImage(mask);
             break;
           }
@@ -7894,112 +7894,100 @@ WandExport MagickBooleanType MogrifyImageList(ImageInfo *image_info,
           }
         if (LocaleCompare("composite",option+1) == 0)
           {
-            CompositeOperator
-              compose;
+            const char
+              *value;
 
-            const char*
-              value;
+            Image
+              *mask_image,
+              *composite_image,
+              *image;
 
             MagickBooleanType
               clip_to_self;
 
-            Image
-              *mask_image,
-              *new_images,
-              *source_image;
-
             RectangleInfo
               geometry;
 
             (void) SyncImagesSettings(mogrify_info,*images,exception);
-            /* Compose value from "-compose" option only */
-            value=GetImageOption(mogrify_info,"compose");
-            if (value == (const char *) NULL)
-              compose=OverCompositeOp;  /* use Over not source_image->compose */
-            else
-              compose=(CompositeOperator) ParseCommandOption(
-                MagickComposeOptions,MagickFalse,value);
-
-            /* Get "clip-to-self" expert setting (false is normal) */
             value=GetImageOption(mogrify_info,"compose:clip-to-self");
             if (value == (const char *) NULL)
               clip_to_self=MagickTrue;
             else
               clip_to_self=IsStringTrue(GetImageOption(mogrify_info,
                 "compose:clip-to-self")); /* if this is true */
-            value=GetImageOption(mogrify_info,"compose:outside-overlay");
-            if (value != (const char *) NULL) {   /* or this false */
-              /* FUTURE: depreciate warning for "compose:outside-overlay"*/
-              clip_to_self=IsStringFalse(value);
-            }
-
-            new_images=RemoveFirstImageFromList(images);
-            source_image=RemoveFirstImageFromList(images);
-            if (source_image == (Image *) NULL)
-              break; /* FUTURE - produce Exception, rather than silent fail */
-
-            /* FUTURE - this should not be here!- should be part of -geometry */
-            if (source_image->geometry != (char *) NULL)
+            if (clip_to_self == MagickFalse) /* or */
+              clip_to_self=IsStringFalse(GetImageOption(mogrify_info,
+                "compose:outside-overlay"));
+            image=RemoveFirstImageFromList(images);
+            composite_image=RemoveFirstImageFromList(images);
+            if (composite_image == (Image *) NULL)
+              {
+                status=MagickFalse;
+                break;
+              }
+            if (composite_image->geometry != (char *) NULL)
               {
                 RectangleInfo
                   resize_geometry;
 
-                (void) ParseRegionGeometry(source_image,source_image->geometry,
-                  &resize_geometry,exception);
-                if ((source_image->columns != resize_geometry.width) ||
-                    (source_image->rows != resize_geometry.height))
+                (void) ParseRegionGeometry(composite_image,
+                  composite_image->geometry,&resize_geometry,exception);
+                if ((composite_image->columns != resize_geometry.width) ||
+                    (composite_image->rows != resize_geometry.height))
                   {
                     Image
                       *resize_image;
 
-                    resize_image=ResizeImage(source_image,resize_geometry.width,
-                      resize_geometry.height,source_image->filter,exception);
+                    resize_image=ResizeImage(composite_image,
+                      resize_geometry.width,resize_geometry.height,
+                      composite_image->filter,exception);
                     if (resize_image != (Image *) NULL)
                       {
-                        source_image=DestroyImage(source_image);
-                        source_image=resize_image;
+                        composite_image=DestroyImage(composite_image);
+                        composite_image=resize_image;
                       }
                   }
               }
-            SetGeometry(source_image,&geometry);
-            (void) ParseAbsoluteGeometry(source_image->geometry,&geometry);
-            GravityAdjustGeometry(new_images->columns,new_images->rows,
-              new_images->gravity, &geometry);
+            SetGeometry(composite_image,&geometry);
+            (void) ParseAbsoluteGeometry(composite_image->geometry,&geometry);
+            GravityAdjustGeometry(image->columns,image->rows,image->gravity,
+              &geometry);
             mask_image=RemoveFirstImageFromList(images);
             if (mask_image == (Image *) NULL)
-              status&=CompositeImage(new_images,source_image,compose,
+              (void) CompositeImage(image,composite_image,image->compose,
                 clip_to_self,geometry.x,geometry.y,exception);
             else
               {
-                if ((compose == DisplaceCompositeOp) ||
-                    (compose == DistortCompositeOp))
+                if ((image->compose != DisplaceCompositeOp) &&
+                    (image->compose != DistortCompositeOp))
                   {
-                    status&=CompositeImage(source_image,mask_image,
+                    status&=CompositeImage(composite_image,mask_image,
                       CopyGreenCompositeOp,MagickTrue,0,0,exception);
-                    status&=CompositeImage(new_images,source_image,compose,
+                    (void) CompositeImage(image,composite_image,image->compose,
                       clip_to_self,geometry.x,geometry.y,exception);
                   }
-                else
+                 else
                   {
                     Image
                       *clone_image;
 
-                    clone_image=CloneImage(new_images,0,0,MagickTrue,exception);
+                    clone_image=CloneImage(image,0,0,MagickTrue,exception);
                     if (clone_image == (Image *) NULL)
                       break;
-                    status&=CompositeImage(new_images,source_image,compose,
+                    (void) CompositeImage(image,composite_image,image->compose,
                       clip_to_self,geometry.x,geometry.y,exception);
-                    status&=CompositeImage(new_images,mask_image,
+                    status&=CompositeImage(image,mask_image,
                       CopyAlphaCompositeOp,MagickTrue,0,0,exception);
-                    status&=CompositeImage(clone_image,new_images,
-                      OverCompositeOp,clip_to_self,0,0,exception);
-                    new_images=DestroyImage(new_images);
-                    new_images=clone_image;
+                    status&=CompositeImage(clone_image,image,OverCompositeOp,
+                      clip_to_self,0,0,exception);
+                    image=DestroyImage(image);
+                    image=clone_image;
                   }
                 mask_image=DestroyImage(mask_image);
               }
-            source_image=DestroyImage(source_image);
-            *images=new_images;
+            composite_image=DestroyImage(composite_image);
+            *images=DestroyImageList(*images);
+            *images=image;
             break;
           }
         if (LocaleCompare("copy",option+1) == 0)
index c6d0da4c147394ebf224cb8bbbb56db7e7e1c5c0..570195a56d2b964d585babca38b0c7cef5a178c0 100644 (file)
@@ -265,8 +265,6 @@ WandExport MagickBooleanType MontageImageCommand(ImageInfo *image_info,
 {
 #define DestroyMontage() \
 { \
-  if (montage_info != (MontageInfo *) NULL) \
-    montage_info=DestroyMontageInfo(montage_info); \
   if (montage_image != (Image *) NULL) \
     montage_image=DestroyImageList(montage_image); \
   DestroyImageStack(); \
@@ -635,9 +633,8 @@ WandExport MagickBooleanType MontageImageCommand(ImageInfo *image_info,
               *clone_images,
               *clone_list;
             
-            if (k == 0)
-              clone_list=CloneImageList(image,exception);
-            else
+            clone_list=CloneImageList(image,exception);
+            if (k != 0)
               clone_list=CloneImageList(image_stack[k-1].image,exception);
             if (clone_list == (Image *) NULL)
               ThrowMontageException(ImageError,"ImageSequenceRequired",option);
index dcf7a4c84a39897880e0ae0e8a0adfe4d978bbd0..14d3795f6881732e618461d2f32c37061f9ac262 100644 (file)
@@ -1296,7 +1296,7 @@ WandPrivate void CLISettingOptionInfo(MagickCLI *cli_wand,
           _draw_info->render= ArgBooleanNot;
           break;
         }
-      if (LocaleCompare("respect-parentheses",option+1) == 0)
+      if (LocaleCompare("respect-parenthesis",option+1) == 0)
         {
           /* link image and setting stacks - option is itself saved on stack! */
           (void) SetImageOption(_image_info,option+1,ArgBooleanString);
@@ -2732,8 +2732,8 @@ static MagickBooleanType CLISimpleOperatorImage(MagickCLI *cli_wand,
         }
       if (LocaleCompare("mask",option+1) == 0)
         {
-          CLIWandWarnReplaced("-write-mask");
-          (void) CLISimpleOperatorImage(cli_wand,"-write-mask",NULL,NULL,
+          CLIWandWarnReplaced("-read-mask");
+          (void) CLISimpleOperatorImage(cli_wand,"-read-mask",NULL,NULL,
             exception);
           break;
         }
@@ -4786,9 +4786,9 @@ WandPrivate void CLINoImageOperator(MagickCLI *cli_wand,
       cli_wand->image_list_stack = node;
       cli_wand->wand.images = NewImageList();
 
-      /* handle respect-parentheses */
+      /* handle respect-parenthesis */
       if (IsStringTrue(GetImageOption(cli_wand->wand.image_info,
-                    "respect-parentheses")) != MagickFalse)
+                    "respect-parenthesis")) != MagickFalse)
         option="{"; /* fall-thru so as to push image settings too */
       else
         break;
@@ -4842,12 +4842,12 @@ WandPrivate void CLINoImageOperator(MagickCLI *cli_wand,
       cli_wand->wand.images= (Image *)node->data;
       node = (Stack *)RelinquishMagickMemory(node);
 
-      /* handle respect-parentheses - of the previous 'pushed' settings */
+      /* handle respect-parenthesis - of the previous 'pushed' settings */
       node = cli_wand->image_info_stack;
       if ( node != (Stack *) NULL)
         {
           if (IsStringTrue(GetImageOption(
-                cli_wand->wand.image_info,"respect-parentheses")) != MagickFalse)
+                cli_wand->wand.image_info,"respect-parenthesis")) != MagickFalse)
             option="}"; /* fall-thru so as to pop image settings too */
           else
             break;