]> granicus.if.org Git - imagemagick/blobdiff - MagickCore/composite-private.h
(no commit message)
[imagemagick] / MagickCore / composite-private.h
index cf2ac32610c1d6db0b83b6a75051c2d30708a212..415f623b9f7cf2b11c8fda21773c5b57e3d5e445 100644 (file)
@@ -1,5 +1,5 @@
 /*
-  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.
 #ifndef _MAGICKCORE_COMPOSITE_PRIVATE_H
 #define _MAGICKCORE_COMPOSITE_PRIVATE_H
 
-#if defined(__cplusplus) || defined(c_plusplus)
-extern "C" {
-#endif
-
-/*
-  ImageMagick Alpha Composite Inline Methods (special export)
-*/
 
 #include "MagickCore/color.h"
 #include "MagickCore/image.h"
@@ -32,6 +25,13 @@ extern "C" {
 #include "MagickCore/pixel-accessor.h"
 #include "MagickCore/pixel-private.h"
 
+#if defined(__cplusplus) || defined(c_plusplus)
+extern "C" {
+#endif
+
+/*
+  ImageMagick Alpha Composite Inline Methods (special export)
+*/
 static inline double MagickOver_(const double p,
   const double alpha,const double q,const double beta)
 {
@@ -74,30 +74,35 @@ static inline void CompositePixelOver(const Image *image,const PixelInfo *p,
     traits=GetPixelChannelTraits(image,channel);
     if (traits == UndefinedPixelTrait)
       continue;
+    if (fabs(alpha-TransparentAlpha) < MagickEpsilon)
+      {
+        composite[i]=q[i];
+        continue;
+      }
     switch (channel)
     {
       case RedPixelChannel:
       {
-        composite[i]=ClampToQuantum(gamma*MagickOver_((double) p->red,
-          alpha,(double) q[i],beta));
+        composite[i]=ClampToQuantum(gamma*MagickOver_((double) p->red,alpha,
+          (double) q[i],beta));
         break;
       }
       case GreenPixelChannel:
       {
-        composite[i]=ClampToQuantum(gamma*MagickOver_((double) p->green,
-          alpha,(double) q[i],beta));
+        composite[i]=ClampToQuantum(gamma*MagickOver_((double) p->green,alpha,
+          (double) q[i],beta));
         break;
       }
       case BluePixelChannel:
       {
-        composite[i]=ClampToQuantum(gamma*MagickOver_((double) p->blue,
-          alpha,(double) q[i],beta));
+        composite[i]=ClampToQuantum(gamma*MagickOver_((double) p->blue,alpha,
+          (double) q[i],beta));
         break;
       }
       case BlackPixelChannel:
       {
-        composite[i]=ClampToQuantum(gamma*MagickOver_((double) p->black,
-          alpha,(double) q[i],beta));
+        composite[i]=ClampToQuantum(gamma*MagickOver_((double) p->black,alpha,
+          (double) q[i],beta));
         break;
       }
       case AlphaPixelChannel:
@@ -106,7 +111,10 @@ static inline void CompositePixelOver(const Image *image,const PixelInfo *p,
         break;
       }
       default:
+      {
+        composite[i]=q[i];
         break;
+      }
     }
   }
 }
@@ -122,7 +130,7 @@ static inline void CompositePixelInfoOver(const PixelInfo *p,
   /*
     Compose pixel p over pixel q with the given opacities.
   */
-  if (fabs(alpha-OpaqueAlpha) < MagickEpsilon)
+  if (fabs(alpha-TransparentAlpha) < MagickEpsilon)
     {
       *composite=(*p);
       return;