]> granicus.if.org Git - imagemagick/commitdiff
(no commit message)
authorcristy <urban-warrior@git.imagemagick.org>
Thu, 5 Jan 2012 12:43:36 +0000 (12:43 +0000)
committercristy <urban-warrior@git.imagemagick.org>
Thu, 5 Jan 2012 12:43:36 +0000 (12:43 +0000)
MagickCore/quantum-import.c

index 13f16c0aab39d5a0872f3480e7dbba6cc16e89a8..797b881b75d61b8c9121caafb9ec064bc43d7d3c 100644 (file)
@@ -3245,7 +3245,8 @@ MagickExport size_t ImportQuantumPixels(Image *image,CacheView *image_view,
   if (quantum_info->alpha_type == DisassociatedQuantumAlpha)
     {
       MagickRealType
-        alpha;
+        gamma,
+        Sa;
 
       register Quantum
         *restrict q;
@@ -3258,11 +3259,24 @@ MagickExport size_t ImportQuantumPixels(Image *image,CacheView *image_view,
         q=GetCacheViewAuthenticPixelQueue(image_view);
       for (x=0; x < (ssize_t) number_pixels; x++)
       {
-        alpha=QuantumScale*GetPixelAlpha(image,q);
-        alpha=1.0/(fabs(alpha) <= MagickEpsilon ? 1.0 : alpha);
-        SetPixelRed(image,ClampToQuantum(alpha*GetPixelRed(image,q)),q);
-        SetPixelGreen(image,ClampToQuantum(alpha*GetPixelGreen(image,q)),q);
-        SetPixelBlue(image,ClampToQuantum(alpha*GetPixelBlue(image,q)),q);
+        register ssize_t
+          i;
+
+        Sa=QuantumScale*GetPixelAlpha(image,q);
+        gamma=1.0/(fabs(Sa) <= MagickEpsilon ? 1.0 : Sa);
+        for (i=0; i < (ssize_t) channels; i++)
+        {
+          PixelChannel
+            channel;
+
+          PixelTrait
+            traits;
+
+          channel=GetPixelChannelMapChannel(image,i);
+          traits=GetPixelChannelMapTraits(image,channel);
+          if ((traits & UpdatePixelTrait) != 0)
+            q[i]=ClampToQuantum(gamma*q[i]);
+        }
         q+=channels;
       }
     }