]> granicus.if.org Git - imagemagick/blobdiff - MagickCore/enhance.c
(no commit message)
[imagemagick] / MagickCore / enhance.c
index 6186091ea7db198fa4d953e30315983822341396..19108a48ce2445d8b3b16367b8630c2c930a4cf6 100644 (file)
 %                    MagickCore Image Enhancement Methods                     %
 %                                                                             %
 %                              Software Design                                %
-%                                John Cristy                                  %
+%                                   Cristy                                    %
 %                                 July 1992                                   %
 %                                                                             %
 %                                                                             %
-%  Copyright 1999-2013 ImageMagick Studio LLC, a non-profit organization      %
+%  Copyright 1999-2014 ImageMagick Studio LLC, a non-profit organization      %
 %  dedicated to making software imaging solutions freely available.           %
 %                                                                             %
 %  You may not use this file except in compliance with the License.  You may  %
@@ -152,7 +152,7 @@ MagickExport MagickBooleanType AutoGammaImage(Image *image,
     if( IfMagickFalse(status) )
       break;
   }
-  return(status);
+  return(status != 0 ? MagickTrue : MagickFalse);
 }
 \f
 /*
@@ -888,10 +888,13 @@ MagickExport MagickBooleanType ContrastImage(Image *image,
           green,
           red;
 
+        red=0.0;
+        green=0.0;
+        blue=0.0;
         Contrast(sign,&red,&green,&blue);
         image->colormap[i].red=(MagickRealType) red;
-        image->colormap[i].red=(MagickRealType) red;
-        image->colormap[i].red=(MagickRealType) red;
+        image->colormap[i].green=(MagickRealType) green;
+        image->colormap[i].blue=(MagickRealType) blue;
       }
     }
   /*
@@ -1377,6 +1380,7 @@ MagickExport Image *EnhanceImage(const Image *image,ExceptionInfo *exception)
 
       if (GetPixelReadMask(image,p) == 0)
         {
+          SetPixelBackgoundColor(enhance_image,q);
           p+=GetPixelChannels(image);
           q+=GetPixelChannels(enhance_image);
           continue;
@@ -1489,11 +1493,11 @@ MagickExport MagickBooleanType EqualizeImage(Image *image,
     progress;
 
   double
-    black[CompositePixelChannel],
+    black[CompositePixelChannel+1],
     *equalize_map,
     *histogram,
     *map,
-    white[CompositePixelChannel];
+    white[CompositePixelChannel+1];
 
   register ssize_t
     i;
@@ -1513,10 +1517,10 @@ MagickExport MagickBooleanType EqualizeImage(Image *image,
     (void) LogMagickEvent(TraceEvent,GetMagickModule(),"%s",image->filename);
   equalize_map=(double *) AcquireQuantumMemory(MaxMap+1UL,
     GetPixelChannels(image)*sizeof(*equalize_map));
-  histogram=(double *) AcquireQuantumMemory(MaxMap+1UL,
-    GetPixelChannels(image)*sizeof(*histogram));
-  map=(double *) AcquireQuantumMemory(MaxMap+1UL,
-    GetPixelChannels(image)*sizeof(*map));
+  histogram=(double *) AcquireQuantumMemory(MaxMap+1UL,GetPixelChannels(image)*
+    sizeof(*histogram));
+  map=(double *) AcquireQuantumMemory(MaxMap+1UL,GetPixelChannels(image)*
+    sizeof(*map));
   if ((equalize_map == (double *) NULL) || (histogram == (double *) NULL) ||
       (map == (double *) NULL))
     {
@@ -1584,6 +1588,8 @@ MagickExport MagickBooleanType EqualizeImage(Image *image,
   }
   (void) ResetMagickMemory(equalize_map,0,(MaxMap+1)*GetPixelChannels(image)*
     sizeof(*equalize_map));
+  (void) ResetMagickMemory(black,0,sizeof(*black));
+  (void) ResetMagickMemory(white,0,sizeof(*white));
   number_channels=GetPixelChannels(image);
   for (i=0; i < (ssize_t) number_channels; i++)
   {
@@ -1972,24 +1978,6 @@ MagickExport MagickBooleanType GrayscaleImage(Image *image,
       if( IfMagickFalse(SetImageStorageClass(image,DirectClass,exception)) )
         return(MagickFalse);
     }
-  switch (image->intensity)
-  {
-    case Rec601LuminancePixelIntensityMethod:
-    case Rec709LuminancePixelIntensityMethod:
-    {
-      (void) SetImageColorspace(image,RGBColorspace,exception);
-      break;
-    }
-    case Rec601LumaPixelIntensityMethod:
-    case Rec709LumaPixelIntensityMethod:
-    case UndefinedPixelIntensityMethod:
-    {
-      (void) SetImageColorspace(image,sRGBColorspace,exception);
-      break;
-    }
-    default:
-      break;
-  }
   /*
     Grayscale image.
   */
@@ -2088,8 +2076,7 @@ MagickExport MagickBooleanType GrayscaleImage(Image *image,
               green=EncodePixelGamma(green);
               blue=EncodePixelGamma(blue);
             }
-          intensity=0.21258623078559555160*red+0.71517030370341084990*
-            green+0.07220049864333622685*blue;
+          intensity=0.212656*red+0.715158*green+0.072186*blue;
           break;
         }
         case Rec709LuminancePixelIntensityMethod:
@@ -2100,8 +2087,7 @@ MagickExport MagickBooleanType GrayscaleImage(Image *image,
               green=DecodePixelGamma(green);
               blue=DecodePixelGamma(blue);
             }
-          intensity=0.21258623078559555160*red+0.71517030370341084990*
-            green+0.07220049864333622685*blue;
+          intensity=0.212656*red+0.715158*green+0.072186*blue;
           break;
         }
         case RMSPixelIntensityMethod:
@@ -2490,6 +2476,7 @@ MagickExport MagickBooleanType LevelImage(Image *image,const double black_point,
       }
   }
   image_view=DestroyCacheView(image_view);
+  (void) ClampImage(image,exception);
   return(status);
 }
 \f
@@ -2715,21 +2702,21 @@ MagickExport MagickBooleanType LevelImageColors(Image *image,
       if ((GetPixelRedTraits(image) & UpdatePixelTrait) != 0)
         {
           channel_mask=SetImageChannelMask(image,RedChannel);
-          status|=LevelImage(image,black_color->red,white_color->red,1.0,
+          status&=LevelImage(image,black_color->red,white_color->red,1.0,
             exception);
           (void) SetImageChannelMask(image,channel_mask);
         }
       if ((GetPixelGreenTraits(image) & UpdatePixelTrait) != 0)
         {
           channel_mask=SetImageChannelMask(image,GreenChannel);
-          status|=LevelImage(image,black_color->green,white_color->green,1.0,
+          status&=LevelImage(image,black_color->green,white_color->green,1.0,
             exception);
           (void) SetImageChannelMask(image,channel_mask);
         }
       if ((GetPixelBlueTraits(image) & UpdatePixelTrait) != 0)
         {
           channel_mask=SetImageChannelMask(image,BlueChannel);
-          status|=LevelImage(image,black_color->blue,white_color->blue,1.0,
+          status&=LevelImage(image,black_color->blue,white_color->blue,1.0,
             exception);
           (void) SetImageChannelMask(image,channel_mask);
         }
@@ -2737,7 +2724,7 @@ MagickExport MagickBooleanType LevelImageColors(Image *image,
           (image->colorspace == CMYKColorspace))
         {
           channel_mask=SetImageChannelMask(image,BlackChannel);
-          status|=LevelImage(image,black_color->black,white_color->black,1.0,
+          status&=LevelImage(image,black_color->black,white_color->black,1.0,
             exception);
           (void) SetImageChannelMask(image,channel_mask);
         }
@@ -2745,7 +2732,7 @@ MagickExport MagickBooleanType LevelImageColors(Image *image,
           (image->alpha_trait == BlendPixelTrait))
         {
           channel_mask=SetImageChannelMask(image,AlphaChannel);
-          status|=LevelImage(image,black_color->alpha,white_color->alpha,1.0,
+          status&=LevelImage(image,black_color->alpha,white_color->alpha,1.0,
             exception);
           (void) SetImageChannelMask(image,channel_mask);
         }
@@ -2755,21 +2742,21 @@ MagickExport MagickBooleanType LevelImageColors(Image *image,
       if ((GetPixelRedTraits(image) & UpdatePixelTrait) != 0)
         {
           channel_mask=SetImageChannelMask(image,RedChannel);
-          status|=LevelizeImage(image,black_color->red,white_color->red,1.0,
+          status&=LevelizeImage(image,black_color->red,white_color->red,1.0,
             exception);
           (void) SetImageChannelMask(image,channel_mask);
         }
       if ((GetPixelGreenTraits(image) & UpdatePixelTrait) != 0)
         {
           channel_mask=SetImageChannelMask(image,GreenChannel);
-          status|=LevelizeImage(image,black_color->green,white_color->green,1.0,
+          status&=LevelizeImage(image,black_color->green,white_color->green,1.0,
             exception);
           (void) SetImageChannelMask(image,channel_mask);
         }
       if ((GetPixelBlueTraits(image) & UpdatePixelTrait) != 0)
         {
           channel_mask=SetImageChannelMask(image,BlueChannel);
-          status|=LevelizeImage(image,black_color->blue,white_color->blue,1.0,
+          status&=LevelizeImage(image,black_color->blue,white_color->blue,1.0,
             exception);
           (void) SetImageChannelMask(image,channel_mask);
         }
@@ -2777,7 +2764,7 @@ MagickExport MagickBooleanType LevelImageColors(Image *image,
           (image->colorspace == CMYKColorspace))
         {
           channel_mask=SetImageChannelMask(image,BlackChannel);
-          status|=LevelizeImage(image,black_color->black,white_color->black,1.0,
+          status&=LevelizeImage(image,black_color->black,white_color->black,1.0,
             exception);
           (void) SetImageChannelMask(image,channel_mask);
         }
@@ -2785,12 +2772,12 @@ MagickExport MagickBooleanType LevelImageColors(Image *image,
           (image->alpha_trait == BlendPixelTrait))
         {
           channel_mask=SetImageChannelMask(image,AlphaChannel);
-          status|=LevelizeImage(image,black_color->alpha,white_color->alpha,1.0,
+          status&=LevelizeImage(image,black_color->alpha,white_color->alpha,1.0,
             exception);
           (void) SetImageChannelMask(image,channel_mask);
         }
     }
-  return(status);
+  return(status != 0 ? MagickTrue : MagickFalse);
 }
 \f
 /*
@@ -3216,12 +3203,6 @@ MagickExport MagickBooleanType ModulateImage(Image *image,const char *modulate,
       red=(double) image->colormap[i].red;
       green=(double) image->colormap[i].green;
       blue=(double) image->colormap[i].blue;
-      if( IfMagickTrue(IssRGBColorspace(image->colorspace)) )
-        {
-          red=DecodePixelGamma((MagickRealType) red);
-          green=DecodePixelGamma((MagickRealType) green);
-          blue=DecodePixelGamma((MagickRealType) blue);
-        }
       switch (colorspace)
       {
         case HCLColorspace:
@@ -3281,12 +3262,6 @@ MagickExport MagickBooleanType ModulateImage(Image *image,const char *modulate,
           break;
         }
       }
-      if( IfMagickTrue(IssRGBColorspace(image->colorspace)) )
-        {
-          red=EncodePixelGamma(red);
-          green=EncodePixelGamma(green);
-          blue=EncodePixelGamma(blue);
-        }
       image->colormap[i].red=red;
       image->colormap[i].green=green;
       image->colormap[i].blue=blue;
@@ -3327,12 +3302,6 @@ MagickExport MagickBooleanType ModulateImage(Image *image,const char *modulate,
       red=(double) GetPixelRed(image,q);
       green=(double) GetPixelGreen(image,q);
       blue=(double) GetPixelBlue(image,q);
-      if( IfMagickTrue(IssRGBColorspace(image->colorspace)) )
-        {
-          red=DecodePixelGamma((MagickRealType) red);
-          green=DecodePixelGamma((MagickRealType) green);
-          blue=DecodePixelGamma((MagickRealType) blue);
-        }
       switch (colorspace)
       {
         case HCLColorspace:
@@ -3341,6 +3310,12 @@ MagickExport MagickBooleanType ModulateImage(Image *image,const char *modulate,
             &red,&green,&blue);
           break;
         }
+        case HCLpColorspace:
+        {
+          ModulateHCLp(percent_hue,percent_saturation,percent_brightness,
+            &red,&green,&blue);
+          break;
+        }
         case HSBColorspace:
         {
           ModulateHSB(percent_hue,percent_saturation,percent_brightness,
@@ -3354,6 +3329,12 @@ MagickExport MagickBooleanType ModulateImage(Image *image,const char *modulate,
             &red,&green,&blue);
           break;
         }
+        case HSVColorspace:
+        {
+          ModulateHSV(percent_hue,percent_saturation,percent_brightness,
+            &red,&green,&blue);
+          break;
+        }
         case HWBColorspace:
         {
           ModulateHWB(percent_hue,percent_saturation,percent_brightness,
@@ -3374,12 +3355,6 @@ MagickExport MagickBooleanType ModulateImage(Image *image,const char *modulate,
           break;
         }
       }
-      if( IfMagickTrue(IssRGBColorspace(image->colorspace)) )
-        {
-          red=EncodePixelGamma(red);
-          green=EncodePixelGamma(green);
-          blue=EncodePixelGamma(blue);
-        }
       SetPixelRed(image,ClampToQuantum(red),q);
       SetPixelGreen(image,ClampToQuantum(green),q);
       SetPixelBlue(image,ClampToQuantum(blue),q);