]> granicus.if.org Git - imagemagick/commitdiff
(no commit message)
authorcristy <urban-warrior@git.imagemagick.org>
Tue, 26 Jul 2011 01:34:43 +0000 (01:34 +0000)
committercristy <urban-warrior@git.imagemagick.org>
Tue, 26 Jul 2011 01:34:43 +0000 (01:34 +0000)
MagickCore/cache.c
MagickCore/fx.c
MagickCore/image.c
MagickCore/image.h
MagickCore/pixel-accessor.h
MagickCore/pixel.c
MagickCore/version.h
coders/pnm.c

index f12de0efd16a1d021e9ad2101f3f62cd331e5f4a..339282af637bf814245db3310268b6c9208e5478 100644 (file)
@@ -2077,8 +2077,6 @@ static Cache GetImagePixelCache(Image *image,const MagickBooleanType clone,
       */
       image->taint=MagickTrue;
       image->type=UndefinedType;
-      if (image->colorspace == GRAYColorspace)
-        image->colorspace=RGBColorspace;
       if (ValidatePixelCacheMorphology(image) == MagickFalse)
         status=OpenPixelCache(image,IOMode,exception);
     }
index 6e225f86f85833738aaf339680095ad876f553d3..9812d2b9975fc88027bc2d54aca62d249107a8bf 100644 (file)
@@ -340,7 +340,7 @@ MagickExport Image *AddNoiseImage(const Image *image,const NoiseType noise_type,
     (void) LogMagickEvent(TraceEvent,GetMagickModule(),"%s",image->filename);
   assert(exception != (ExceptionInfo *) NULL);
   assert(exception->signature == MagickSignature);
-  noise_image=CloneImage(image,image->columns,image->rows,MagickTrue,exception);
+  noise_image=CloneImage(image,0,0,MagickTrue,exception);
   if (noise_image == (Image *) NULL)
     return((Image *) NULL);
   if (SetImageStorageClass(noise_image,DirectClass) == MagickFalse)
@@ -393,33 +393,22 @@ MagickExport Image *AddNoiseImage(const Image *image,const NoiseType noise_type,
       }
     for (x=0; x < (ssize_t) image->columns; x++)
     {
-      register ssize_t
-        i;
-
-      for (i=0; i < (ssize_t) GetPixelChannels(image); i++)
-      {
-        PixelChannel
-          channel;
-
-        PixelTrait
-          noise_traits,
-          traits;
-
-        traits=GetPixelChannelMapTraits(image,(PixelChannel) i);
-        if (traits == UndefinedPixelTrait)
-          continue;
-        channel=GetPixelChannelMapChannel(image,(PixelChannel) i);
-        noise_traits=GetPixelChannelMapTraits(noise_image,channel);
-        if (noise_traits == UndefinedPixelTrait)
-          continue;
-        if ((noise_traits & CopyPixelTrait) != 0)
-          {
-            q[channel]=p[i];
-            continue;
-          }
-        q[channel]=ClampToQuantum(GenerateDifferentialNoise(random_info[id],
-          p[i],noise_type,attenuate));
-      }
+      if ((GetPixelRedTraits(image) & UpdatePixelTrait) != 0)
+        SetPixelRed(noise_image,ClampToQuantum(GenerateDifferentialNoise(
+          random_info[id],GetPixelRed(image,p),noise_type,attenuate)),q);
+      if ((GetPixelGreenTraits(image) & UpdatePixelTrait) != 0)
+        SetPixelGreen(noise_image,ClampToQuantum(GenerateDifferentialNoise(
+          random_info[id],GetPixelGreen(image,p),noise_type,attenuate)),q);
+      if ((GetPixelBlueTraits(image) & UpdatePixelTrait) != 0)
+        SetPixelBlue(noise_image,ClampToQuantum(GenerateDifferentialNoise(
+          random_info[id],GetPixelBlue(image,p),noise_type,attenuate)),q);
+      if (((GetPixelBlackTraits(image) & UpdatePixelTrait) != 0) &&
+          (image->colorspace == CMYKColorspace))
+        SetPixelBlack(noise_image,ClampToQuantum(GenerateDifferentialNoise(
+          random_info[id],GetPixelBlack(image,p),noise_type,attenuate)),q);
+      if ((GetPixelAlphaTraits(image) & UpdatePixelTrait) != 0)
+        SetPixelAlpha(noise_image,ClampToQuantum(GenerateDifferentialNoise(
+          random_info[id],GetPixelAlpha(image,p),noise_type,attenuate)),q);
       p+=GetPixelChannels(image);
       q+=GetPixelChannels(noise_image);
     }
@@ -1523,7 +1512,7 @@ static MagickRealType FxGetSymbol(FxInfo *fx_info,const PixelChannel channel,
           alpha=(MagickRealType) (QuantumScale*pixel.alpha);
           return(alpha);
         }
-        case DefaultPixelChannels:
+        case IntensityPixelChannel:
         {
           return(QuantumScale*GetPixelInfoIntensity(&pixel));
         }
@@ -3022,7 +3011,7 @@ MagickExport Image *FxImage(const Image *image,const char *expression,
         alpha=0.0;
         (void) FxEvaluateChannelExpression(fx_info[id],(PixelChannel) i,x,y,
           &alpha,exception);
-        q[channel]=ClampToQuantum((MagickRealType) QuantumRange*alpha);
+        q[i]=ClampToQuantum((MagickRealType) QuantumRange*alpha);
       }
       p+=GetPixelChannels(image);
       q+=GetPixelChannels(fx_image);
@@ -5192,8 +5181,7 @@ MagickExport Image *TintImage(const Image *image,const char *opacity,
 %  The format of the VignetteImage method is:
 %
 %      Image *VignetteImage(const Image *image,const double radius,
-%        const double sigma,const ssize_t x,const ssize_t y,
-%        ExceptionInfo *exception)
+%        const double sigma,const ssize_t x,const ssize_t y,ExceptionInfo *exception)
 %
 %  A description of each parameter follows:
 %
@@ -5239,8 +5227,8 @@ MagickExport Image *VignetteImage(const Image *image,const double radius,
       return((Image *) NULL);
     }
   canvas_image->matte=MagickTrue;
-  oval_image=CloneImage(canvas_image,canvas_image->columns,canvas_image->rows,
-    MagickTrue,exception);
+  oval_image=CloneImage(canvas_image,canvas_image->columns,
+    canvas_image->rows,MagickTrue,exception);
   if (oval_image == (Image *) NULL)
     {
       canvas_image=DestroyImage(canvas_image);
index 1a2fcb01736e9dde60da316e69168ed32bac77b3..56a17bf1dfc3f92c67d89228bab86c8859a0d972 100644 (file)
@@ -774,6 +774,7 @@ MagickExport Image *CloneImage(const Image *image,const size_t columns,
   clone_image->signature=MagickSignature;
   clone_image->storage_class=image->storage_class;
   clone_image->number_channels=image->number_channels;
+  clone_image->number_meta_channels=image->number_meta_channels;
   clone_image->metacontent_extent=image->metacontent_extent;
   clone_image->colorspace=image->colorspace;
   clone_image->matte=image->matte;
index 02186734843684783ce2a7f7e062c68c05288cde..fc22d6adb0e66fada897dc8f17e2c58ec156c08a 100644 (file)
@@ -281,6 +281,7 @@ struct _Image
 
   size_t
     number_channels,
+    number_meta_channels,
     metacontent_extent;
 
   MagickBooleanType
index c6f96ab4ecdc36777f5bbb41a2753c8893004198..478a12d8e95c048011b58fff0d154e5bb733ad05 100644 (file)
@@ -176,6 +176,11 @@ static inline PixelTrait GetPixelMagentaTraits(const Image *image)
   return(image->channel_map[image->map][MagentaPixelChannel].traits);
 }
 
+static inline size_t GetPixelMetaChannels(const Image *image)
+{
+  return(image->number_meta_channels);
+}
+
 static inline size_t GetPixelMetacontentExtent(const Image *image)
 {
   return(image->metacontent_extent);
@@ -594,6 +599,12 @@ static inline void SetPixelMagentaTraits(Image *image,const PixelTrait traits)
   image->channel_map[image->map][MagentaPixelChannel].traits=traits;
 }
 
+static inline void SetPixelMetaChannels(Image *image,
+  const size_t number_meta_channels)
+{
+  image->number_meta_channels=number_meta_channels;
+}
+
 static inline void SetPixelMetacontentExtent(Image *image,const size_t extent)
 {
   image->metacontent_extent=extent;
index d4fc27032361562670ab2a601f27005c8cc43b48..c982273f3c97d98f084f52dc45e22d7b420f9fa5 100644 (file)
@@ -4581,6 +4581,12 @@ MagickExport void StandardPixelChannelMap(Image *image)
     (UpdatePixelTrait | BlendPixelTrait));
   SetPixelChannelMapComponent(image,AlphaPixelChannel,AlphaPixelChannel);
   SetPixelChannelMapTraits(image,AlphaPixelChannel,UpdatePixelTrait);
+  if (image->colorspace == GRAYColorspace)
+    {
+      image->number_channels=2;
+      SetPixelChannelMapComponent(image,GreenPixelChannel,RedPixelChannel);
+      SetPixelChannelMapComponent(image,BluePixelChannel,RedPixelChannel);
+    }
   if (image->colorspace == CMYKColorspace)
     {
       image->number_channels++;
@@ -4594,4 +4600,5 @@ MagickExport void StandardPixelChannelMap(Image *image)
       SetPixelChannelMapComponent(image,IndexPixelChannel,IndexPixelChannel);
       SetPixelChannelMapTraits(image,IndexPixelChannel,CopyPixelTrait);
     }
+  image->number_channels+=image->number_meta_channels;
 }
index 4f955e94412123c23976964b60b2ef15b069391b..037000add8b4be77ce7b910b621dcff050e66a00 100644 (file)
@@ -34,7 +34,7 @@ extern "C" {
 #define MagickLibAddendum  "-0"
 #define MagickLibInterface  5
 #define MagickLibMinInterface  5
-#define MagickReleaseDate  "2011-07-24"
+#define MagickReleaseDate  "2011-07-25"
 #define MagickChangeDate   "20110721"
 #define MagickAuthoritativeURL  "http://www.imagemagick.org"
 #if defined(MAGICKCORE_OPENMP_SUPPORT)
index f82ba75ae739ae32992c9fad73ca4acefab853aa..1f3e764c04660e0748b12670a2cbfb1b8123fb6a 100644 (file)
@@ -375,11 +375,15 @@ static Image *ReadPNMImage(const ImageInfo *image_info,ExceptionInfo *exception)
                   image->matte=MagickTrue;
                 }
               if (LocaleCompare(value,"GRAYSCALE") == 0)
-                quantum_type=GrayQuantum;
+                {
+                  image->colorspace=GRAYColorspace;
+                  quantum_type=GrayQuantum;
+                }
               if (LocaleCompare(value,"GRAYSCALE_ALPHA") == 0)
                 {
-                  quantum_type=GrayAlphaQuantum;
+                  image->colorspace=GRAYColorspace;
                   image->matte=MagickTrue;
+                  quantum_type=GrayAlphaQuantum;
                 }
               if (LocaleCompare(value,"RGB_ALPHA") == 0)
                 {
@@ -423,6 +427,7 @@ static Image *ReadPNMImage(const ImageInfo *image_info,ExceptionInfo *exception)
         /*
           Convert PBM image to pixel packets.
         */
+        image->colorspace=GRAYColorspace;
         for (y=0; y < (ssize_t) image->rows; y++)
         {
           register ssize_t
@@ -462,6 +467,7 @@ static Image *ReadPNMImage(const ImageInfo *image_info,ExceptionInfo *exception)
         /*
           Convert PGM image to pixel packets.
         */
+        image->colorspace=GRAYColorspace;
         scale=(Quantum *) NULL;
         if (max_value != (1U*QuantumRange))
           {
@@ -484,7 +490,7 @@ static Image *ReadPNMImage(const ImageInfo *image_info,ExceptionInfo *exception)
             *restrict q;
 
           q=QueueAuthenticPixels(image,0,y,image->columns,1,exception);
-          if (q == (const Quantum *) NULL)
+          if (q == (Quantum *) NULL)
             break;
           for (x=0; x < (ssize_t) image->columns; x++)
           {
@@ -582,6 +588,7 @@ static Image *ReadPNMImage(const ImageInfo *image_info,ExceptionInfo *exception)
         /*
           Convert PBM raw image to pixel packets.
         */
+        image->colorspace=GRAYColorspace;
         quantum_type=GrayQuantum;
         if (image->storage_class == PseudoClass)
           quantum_type=IndexQuantum;
@@ -656,6 +663,7 @@ static Image *ReadPNMImage(const ImageInfo *image_info,ExceptionInfo *exception)
         /*
           Convert PGM raw image to pixel packets.
         */
+        image->colorspace=GRAYColorspace;
         range=GetQuantumRange(image->depth);
         quantum_type=GrayQuantum;
         extent=(image->depth <= 8 ? 1 : 2)*image->columns;