]> granicus.if.org Git - imagemagick/commitdiff
(no commit message)
authorcristy <urban-warrior@git.imagemagick.org>
Mon, 19 Sep 2011 00:19:19 +0000 (00:19 +0000)
committercristy <urban-warrior@git.imagemagick.org>
Mon, 19 Sep 2011 00:19:19 +0000 (00:19 +0000)
MagickCore/enhance.c
MagickCore/histogram.c
MagickCore/image.c
MagickCore/pixel-accessor.h

index 6aa4dc6cbf26d78378097280da2a1c88c41f1e20..c9ea75d6da6ae00cddca120897146f01f14eb5fa 100644 (file)
@@ -140,7 +140,7 @@ MagickExport MagickBooleanType AutoGammaImage(Image *image,
     traits=GetPixelChannelMapTraits(image,(PixelChannel) i);
     if ((traits & UpdatePixelTrait) == 0)
       continue;
-    channel_mask=SetPixelChannelMask(image,(ChannelType) i);
+    channel_mask=SetPixelChannelMask(image,(ChannelType) (1 << i));
     status=GetImageMean(image,&mean,&sans,exception);
     gamma=log(mean*QuantumScale)/log_mean;
     status&=LevelImage(image,0.0,(double) QuantumRange,gamma,exception);
index 36bac7578d8cfb8d60830ce9f11f62b46477fe43..ea7e2a6217acfbcb57712ffb7ab07afcbcb1f2b9 100644 (file)
@@ -1020,7 +1020,7 @@ MagickExport MagickBooleanType MinMaxStretchImage(Image *image,
     traits=GetPixelChannelMapTraits(image,(PixelChannel) i);
     if ((traits & UpdatePixelTrait) == 0)
       continue;
-    channel_mask=SetPixelChannelMask(image,i);
+    channel_mask=SetPixelChannelMask(image,(ChannelType) (1 << i));
     status&=GetImageRange(image,&min,&max,exception);
     min+=black;
     max-=white;
index 827bedc317507f3e24ecbf644a7a53d95e19b7ef..96d088fd2475494b46fcb0b669af791892708295 100644 (file)
@@ -1882,7 +1882,7 @@ MagickExport MagickBooleanType IsHighDynamicRangeImage(const Image *image,
         traits=GetPixelChannelMapTraits(image,(PixelChannel) i);
         if (traits == UndefinedPixelTrait)
           continue;
-        pixel=(MagickRealType) p[i]; 
+        pixel=(MagickRealType) p[i];
         if ((pixel < 0.0) || (pixel > QuantumRange) ||
             (pixel != (QuantumAny) pixel))
           break;
@@ -2310,35 +2310,24 @@ MagickExport MagickBooleanType SeparateImage(Image *image)
       }
     for (x=0; x < (ssize_t) image->columns; x++)
     {
-      if ((GetPixelRedTraits(image) & UpdatePixelTrait) != 0)
-        {
-          SetPixelGreen(image,GetPixelRed(image,q),q);
-          SetPixelBlue(image,GetPixelRed(image,q),q);
-        }
-      if ((GetPixelGreenTraits(image) & UpdatePixelTrait) != 0)
-        {
-          SetPixelRed(image,GetPixelGreen(image,q),q);
-          SetPixelBlue(image,GetPixelGreen(image,q),q);
-        }
-      if ((GetPixelBlueTraits(image) & UpdatePixelTrait) != 0)
-        {
-          SetPixelRed(image,GetPixelBlue(image,q),q);
-          SetPixelGreen(image,GetPixelBlue(image,q),q);
-        }
-      if (((GetPixelBlackTraits(image) & UpdatePixelTrait) != 0) &&
-          (image->colorspace == CMYKColorspace))
-        {
-          SetPixelRed(image,GetPixelBlack(image,q),q);
-          SetPixelGreen(image,GetPixelBlack(image,q),q);
-          SetPixelBlue(image,GetPixelBlack(image,q),q);
-        }
-      if (((GetPixelAlphaTraits(image) & UpdatePixelTrait) != 0) &&
-          (image->matte != MagickFalse))
-        {
-          SetPixelRed(image,GetPixelAlpha(image,q),q);
-          SetPixelGreen(image,GetPixelAlpha(image,q),q);
-          SetPixelBlue(image,GetPixelAlpha(image,q),q);
-        }
+      register ssize_t
+        i;
+
+      for (i=0; i < (ssize_t) GetPixelChannels(image); i++)
+      {
+        PixelTrait
+          traits;
+
+        register ssize_t
+          j;
+
+        traits=GetPixelChannelMapTraits(image,(PixelChannel) i);
+        if (traits == UndefinedPixelTrait)
+          continue;
+        if ((traits & UpdatePixelTrait) != 0)
+          for (j=0; j < (ssize_t) GetPixelChannels(image); j++)
+            q[j]=q[i];
+      }
       q+=GetPixelChannels(image);
     }
     if (SyncCacheViewAuthenticPixels(image_view,exception) == MagickFalse)
@@ -2396,52 +2385,35 @@ MagickExport Image *SeparateImages(const Image *image,ExceptionInfo *exception)
     *images,
     *separate_image;
 
+  register ssize_t
+    i;
+
   assert(image != (Image *) NULL);
   assert(image->signature == MagickSignature);
   if (image->debug != MagickFalse)
     (void) LogMagickEvent(TraceEvent,GetMagickModule(),"%s",image->filename);
   images=NewImageList();
-  if ((GetPixelRedTraits(image) & UpdatePixelTrait) != 0)
-    {
-      separate_image=CloneImage(image,0,0,MagickTrue,exception);
-      channel_mask=SetPixelChannelMask(separate_image,RedChannel);
-      (void) SeparateImage(separate_image);
-      (void) SetPixelChannelMap(separate_image,channel_mask);
-      AppendImageToList(&images,separate_image);
-    }
-  if ((GetPixelGreenTraits(image) & UpdatePixelTrait) != 0)
-    {
-      separate_image=CloneImage(image,0,0,MagickTrue,exception);
-      channel_mask=SetPixelChannelMask(separate_image,GreenChannel);
-      (void) SeparateImage(separate_image);
-      (void) SetPixelChannelMap(separate_image,channel_mask);
-      AppendImageToList(&images,separate_image);
-    }
-  if ((GetPixelBlueTraits(image) & UpdatePixelTrait) != 0)
-    {
-      separate_image=CloneImage(image,0,0,MagickTrue,exception);
-      channel_mask=SetPixelChannelMask(separate_image,BlueChannel);
-      (void) SeparateImage(separate_image);
-      (void) SetPixelChannelMap(separate_image,channel_mask);
-      AppendImageToList(&images,separate_image);
-    }
-  if (((GetPixelBlackTraits(image) & UpdatePixelTrait) != 0) &&
-      (image->colorspace == CMYKColorspace))
-    {
-      separate_image=CloneImage(image,0,0,MagickTrue,exception);
-      channel_mask=SetPixelChannelMask(separate_image,BlackChannel);
-      (void) SeparateImage(separate_image);
-      (void) SetPixelChannelMap(separate_image,channel_mask);
-      AppendImageToList(&images,separate_image);
-    }
-  if ((GetPixelAlphaTraits(image) & UpdatePixelTrait) != 0)
-    {
-      separate_image=CloneImage(image,0,0,MagickTrue,exception);
-      channel_mask=SetPixelChannelMask(separate_image,AlphaChannel);
-      (void) SeparateImage(separate_image);
-      (void) SetPixelChannelMap(separate_image,channel_mask);
-      AppendImageToList(&images,separate_image);
-    }
+  for (i=0; i < (ssize_t) GetPixelChannels(image); i++)
+  {
+    PixelTrait
+      traits;
+
+    traits=GetPixelChannelMapTraits(image,(PixelChannel) i);
+    if (traits == UndefinedPixelTrait)
+      continue;
+    if ((traits & UpdatePixelTrait) != 0)
+      {
+        separate_image=CloneImage(image,0,0,MagickTrue,exception);
+        if (separate_image != (Image *) NULL)
+          {
+            channel_mask=SetPixelChannelMask(separate_image,
+              (ChannelType) (1 << i));
+            (void) SeparateImage(separate_image);
+            (void) SetPixelChannelMap(separate_image,channel_mask);
+            AppendImageToList(&images,separate_image);
+          }
+      }
+  }
   return(images);
 }
 \f
@@ -2524,9 +2496,9 @@ MagickExport MagickBooleanType SetImageAlphaChannel(Image *image,
         ConvertRGBToCMYK(&background);
       SetPacketPixelInfo(image,&background,&pixel);
       image_view=AcquireCacheView(image);
-      #if defined(MAGICKCORE_OPENMP_SUPPORT)
-        #pragma omp parallel for schedule(dynamic,4) shared(status)
-      #endif
+#if defined(MAGICKCORE_OPENMP_SUPPORT)
+      #pragma omp parallel for schedule(dynamic,4) shared(status)
+#endif
       for (y=0; y < (ssize_t) image->rows; y++)
       {
         register Quantum
@@ -2547,13 +2519,7 @@ MagickExport MagickBooleanType SetImageAlphaChannel(Image *image,
         for (x=0; x < (ssize_t) image->columns; x++)
         {
           if (GetPixelAlpha(image,q) == TransparentAlpha)
-            {
-              SetPixelRed(image,pixel.red,q);
-              SetPixelGreen(image,pixel.green,q);
-              SetPixelBlue(image,pixel.blue,q);
-              if (image->colorspace == CMYKColorspace)
-                SetPixelBlack(image,pixel.black,q);
-            }
+            SetPixelPixelInfo(image,&background,q);
           q+=GetPixelChannels(image);
         }
         if (SyncCacheViewAuthenticPixels(image_view,exception) == MagickFalse)
@@ -2712,16 +2678,7 @@ MagickExport MagickBooleanType SetImageBackgroundColor(Image *image)
       }
     for (x=0; x < (ssize_t) image->columns; x++)
     {
-      if ((GetPixelRedTraits(image) & UpdatePixelTrait) != 0)
-        SetPixelRed(image,ClampToQuantum(background.red),q);
-      if ((GetPixelGreenTraits(image) & UpdatePixelTrait) != 0)
-        SetPixelGreen(image,ClampToQuantum(background.green),q);
-      if ((GetPixelBlueTraits(image) & UpdatePixelTrait) != 0)
-        SetPixelBlue(image,ClampToQuantum(background.blue),q);
-      if ((GetPixelBlackTraits(image) & UpdatePixelTrait) != 0)
-        SetPixelBlack(image,ClampToQuantum(background.black),q);
-      if ((GetPixelAlphaTraits(image) & CopyPixelTrait) != 0)
-        SetPixelAlpha(image,ClampToQuantum(background.alpha),q);
+      SetPixelPixelInfo(image,&background,q);
       q+=GetPixelChannels(image);
     }
     if (SyncCacheViewAuthenticPixels(image_view,exception) == MagickFalse)
index ddd798932008fd8277ad25fd1e583a36ce685504..5351d8ba0f48cfb00de33614843a9fafab751143 100644 (file)
@@ -418,13 +418,17 @@ static inline MagickBooleanType IsPixelPacketMonochrome(
 static inline void SetPacketPixelInfo(const Image *image,
   const PixelInfo *pixel_info,PixelPacket *packet)
 {
-  packet->red=ClampToQuantum(pixel_info->red);
-  packet->green=ClampToQuantum(pixel_info->green);
-  packet->blue=ClampToQuantum(pixel_info->blue);
-  packet->alpha=ClampToQuantum(pixel_info->alpha);
-  if (image->colorspace == CMYKColorspace)
+  if ((image->channel_map[RedPixelChannel].traits & UpdatePixelTrait) != 0)
+    packet->red=ClampToQuantum(pixel_info->red);
+  if ((image->channel_map[GreenPixelChannel].traits & UpdatePixelTrait) != 0)
+    packet->green=ClampToQuantum(pixel_info->green);
+  if ((image->channel_map[BluePixelChannel].traits & UpdatePixelTrait) != 0)
+    packet->blue=ClampToQuantum(pixel_info->blue);
+  if ((image->channel_map[BlackPixelChannel].traits & UpdatePixelTrait) != 0)
     packet->black=ClampToQuantum(pixel_info->black);
-  if (image->storage_class == PseudoClass)
+  if ((image->channel_map[AlphaPixelChannel].traits & CopyPixelTrait) != 0)
+    packet->alpha=ClampToQuantum(pixel_info->alpha);
+  if ((image->channel_map[IndexPixelChannel].traits & CopyPixelTrait) != 0)
     packet->index=ClampToQuantum(pixel_info->index);
 }
 
@@ -554,13 +558,17 @@ static inline void SetPixelIndexTraits(Image *image,const PixelTrait traits)
 static inline void SetPixelInfo(const Image *image,const Quantum *pixel,
   PixelInfo *pixel_info)
 {
-  pixel_info->red=(MagickRealType) GetPixelRed(image,pixel);
-  pixel_info->green=(MagickRealType) GetPixelGreen(image,pixel);
-  pixel_info->blue=(MagickRealType) GetPixelBlue(image,pixel);
-  pixel_info->alpha=(MagickRealType) GetPixelAlpha(image,pixel);
-  if (image->colorspace == CMYKColorspace)
+  if ((image->channel_map[RedPixelChannel].traits & UpdatePixelTrait) != 0)
+    pixel_info->red=(MagickRealType) GetPixelRed(image,pixel);
+  if ((image->channel_map[GreenPixelChannel].traits & UpdatePixelTrait) != 0)
+    pixel_info->green=(MagickRealType) GetPixelGreen(image,pixel);
+  if ((image->channel_map[BluePixelChannel].traits & UpdatePixelTrait) != 0)
+    pixel_info->blue=(MagickRealType) GetPixelBlue(image,pixel);
+  if ((image->channel_map[BlackPixelChannel].traits & UpdatePixelTrait) != 0)
     pixel_info->black=(MagickRealType) GetPixelBlack(image,pixel);
-  if (image->storage_class == PseudoClass)
+  if ((image->channel_map[AlphaPixelChannel].traits & CopyPixelTrait) != 0)
+    pixel_info->alpha=(MagickRealType) GetPixelAlpha(image,pixel);
+  if ((image->channel_map[IndexPixelChannel].traits & CopyPixelTrait) != 0)
     pixel_info->index=(MagickRealType) GetPixelIndex(image,pixel);
 }
 
@@ -592,8 +600,7 @@ static inline void SetPixelInfoPacket(const Image *image,
 static inline void SetPixelMagenta(const Image *image,const Quantum magenta,
   Quantum *pixel)
 {
-  pixel[image->channel_map[MagentaPixelChannel].channel]=
-    magenta;
+  pixel[image->channel_map[MagentaPixelChannel].channel]=magenta;
 }
 
 static inline void SetPixelMagentaTraits(Image *image,const PixelTrait traits)
@@ -638,7 +645,8 @@ static inline void SetPixelPixelInfo(const Image *image,
   SetPixelRed(image,ClampToQuantum(pixel_info->red),packet);
   SetPixelGreen(image,ClampToQuantum(pixel_info->green),packet);
   SetPixelBlue(image,ClampToQuantum(pixel_info->blue),packet);
-  SetPixelAlpha(image,ClampToQuantum(pixel_info->alpha),packet);
+  if (image->matte != MagickFalse)
+    SetPixelAlpha(image,ClampToQuantum(pixel_info->alpha),packet);
   if (image->colorspace == CMYKColorspace)
     SetPixelBlack(image,ClampToQuantum(pixel_info->black),packet);
 }