]> granicus.if.org Git - imagemagick/commitdiff
(no commit message)
authorcristy <urban-warrior@git.imagemagick.org>
Sun, 24 May 2015 18:11:01 +0000 (18:11 +0000)
committercristy <urban-warrior@git.imagemagick.org>
Sun, 24 May 2015 18:11:01 +0000 (18:11 +0000)
MagickCore/channel.c
MagickCore/feature.c
MagickCore/pixel.c

index 16a8845958b8892be01a21e6f847ff133ea3c1de..99a52302cb21246b69cb2c98ccdd2903e9656bd3 100644 (file)
@@ -981,6 +981,7 @@ MagickExport MagickBooleanType SetImageAlphaChannel(Image *image,
         for (x=0; x < (ssize_t) image->columns; x++)
         {
           double
+            gamma,
             Sa;
   
           register ssize_t
@@ -992,13 +993,14 @@ MagickExport MagickBooleanType SetImageAlphaChannel(Image *image,
               continue;
             }
           Sa=QuantumScale*GetPixelAlpha(image,q);
+          gamma=PerceptibleReciprocal(Sa);
           for (i=0; i < (ssize_t) GetPixelChannels(image); i++)
           {
             PixelChannel channel=GetPixelChannelChannel(image,i);
             PixelTrait traits=GetPixelChannelTraits(image,channel);
             if ((traits & UpdatePixelTrait) == 0)
               continue;
-            q[i]=ClampToQuantum(Sa*q[i]);
+            q[i]=ClampToQuantum(gamma*q[i]);
           }
           q+=GetPixelChannels(image);
         }
index 3823935ff4bb97370cad4c4aa8604026228518fc..340d836bfdbee081909f4f91db1f91c7e756dd6d 100644 (file)
@@ -48,6 +48,7 @@
 #include "MagickCore/cache.h"
 #include "MagickCore/cache-private.h"
 #include "MagickCore/cache-view.h"
+#include "MagickCore/channel.h"
 #include "MagickCore/client.h"
 #include "MagickCore/color.h"
 #include "MagickCore/color-private.h"
@@ -296,7 +297,7 @@ MagickExport Image *CannyEdgeImage(const Image *image,const double radius,
       edge_image=DestroyImage(edge_image);
       return((Image *) NULL);
     }
-  (void) SetImageAlphaChannel(edge_image,DisassociateAlphaChannel,exception);
+  (void) SetImageAlphaChannel(edge_image,OffAlphaChannel,exception);
   /*
     Find the intensity gradient of the image.
   */
index a5ccb0becdabdca6d24f847b86e95dd3f66e6516..a16bcc383bbbe50617252b286e51ce71952809c1 100644 (file)
@@ -1412,7 +1412,8 @@ static void ExportLongLongPixel(Image *image,const RectangleInfo *roi,
           break;
         for (x=0; x < (ssize_t) roi->width; x++)
         {
-          *q++=ScaleQuantumToLongLong(ClampToQuantum(GetPixelIntensity(image,p)));
+          *q++=ScaleQuantumToLongLong(ClampToQuantum(
+            GetPixelIntensity(image,p)));
           p+=GetPixelChannels(image);
         }
       }
@@ -2222,6 +2223,7 @@ MagickExport MagickRealType GetPixelInfoIntensity(const Image *restrict image,
 {
   MagickRealType
     blue,
+    gamma,
     green,
     red,
     intensity;
@@ -2232,9 +2234,12 @@ MagickExport MagickRealType GetPixelInfoIntensity(const Image *restrict image,
   method=Rec709LumaPixelIntensityMethod;
   if (image != (const Image *) NULL)
     method=image->intensity;
-  red=pixel->red;
-  green=pixel->green;
-  blue=pixel->blue;
+  gamma=1.0;
+  if (image->alpha_trait != UndefinedPixelTrait)
+    gamma=PerceptibleReciprocal(QuantumScale*pixel->alpha);
+  red=gamma*pixel->red;
+  green=gamma*pixel->green;
+  blue=gamma*pixel->blue;
   switch (method)
   {
     case AveragePixelIntensityMethod:
@@ -2356,15 +2361,17 @@ MagickExport MagickRealType GetPixelIntensity(const Image *restrict image,
 {
   MagickRealType
     blue,
+    gamma,
     green,
     red,
     intensity;
 
-  if (image->colorspace == GRAYColorspace)
-    return((MagickRealType) GetPixelGray(image,pixel));
-  red=(MagickRealType) GetPixelRed(image,pixel);
-  green=(MagickRealType) GetPixelGreen(image,pixel);
-  blue=(MagickRealType) GetPixelBlue(image,pixel);
+  gamma=1.0;
+  if (image->alpha_trait != UndefinedPixelTrait)
+    gamma=PerceptibleReciprocal(QuantumScale*GetPixelAlpha(image,pixel));
+  red=gamma*GetPixelRed(image,pixel);
+  green=gamma*GetPixelGreen(image,pixel);
+  blue=gamma*GetPixelBlue(image,pixel);
   switch (image->intensity)
   {
     case AveragePixelIntensityMethod: