]> granicus.if.org Git - imagemagick/blobdiff - MagickCore/decorate.c
Fix CLUT interpolation method
[imagemagick] / MagickCore / decorate.c
index ace1c5a3c58d4c4feffb659aa9bf7c381a943270..fde090785de95f201a70505a11af2d86170c91e5 100644 (file)
@@ -229,8 +229,12 @@ MagickExport Image *FrameImage(const Image *image,const FrameInfo *frame_info,
       frame_image=DestroyImage(frame_image);
       return((Image *) NULL);
     }
-  if (frame_image->matte_color.alpha != OpaqueAlpha)
-    frame_image->matte=MagickTrue;
+  if ((IsGrayColorspace(image->colorspace) != MagickFalse) &&
+      (IsPixelInfoGray(&image->matte_color) == MagickFalse))
+    SetImageColorspace(frame_image,sRGBColorspace,exception);
+  if ((frame_image->border_color.matte != MagickFalse) &&
+      (frame_image->matte == MagickFalse))
+    (void) SetImageAlpha(frame_image,OpaqueAlpha,exception);
   frame_image->page=image->page;
   if ((image->page.width != 0) && (image->page.height != 0))
     {
@@ -379,7 +383,7 @@ MagickExport Image *FrameImage(const Image *image,const FrameInfo *frame_info,
     Draw sides of ornamental border.
   */
 #if defined(MAGICKCORE_OPENMP_SUPPORT) 
-  #pragma omp parallel for schedule(static,8) shared(progress,status)
+  #pragma omp parallel for schedule(static) shared(progress,status)
 #endif
   for (y=0; y < (ssize_t) image->rows; y++)
   {
@@ -480,7 +484,7 @@ MagickExport Image *FrameImage(const Image *image,const FrameInfo *frame_info,
           proceed;
 
 #if defined(MAGICKCORE_OPENMP_SUPPORT) 
-  #pragma omp critical (MagickCore_FrameImage)
+        #pragma omp critical (MagickCore_FrameImage)
 #endif
         proceed=SetImageProgress(image,FrameImageTag,progress++,image->rows);
         if (proceed == MagickFalse)
@@ -592,7 +596,8 @@ MagickExport Image *FrameImage(const Image *image,const FrameInfo *frame_info,
         frame_info->inner_bevel);
       y=(ssize_t) (frame_info->outer_bevel+(frame_info->y-bevel_width)+
         frame_info->inner_bevel);
-      (void) CompositeImage(frame_image,compose,image,x,y,exception);
+      (void) CompositeImage(frame_image,image,compose,MagickTrue,x,y,
+        exception);
     }
   return(frame_image);
 }
@@ -703,6 +708,11 @@ MagickExport MagickBooleanType RaiseImage(Image *image,
       }
     for (x=0; x < y; x++)
     {
+      if (GetPixelMask(image,q) != 0)
+        {
+          q+=GetPixelChannels(image);
+          continue;
+        }
       for (i=0; i < (ssize_t) GetPixelChannels(image); i++)
       {
         PixelChannel
@@ -713,15 +723,20 @@ MagickExport MagickBooleanType RaiseImage(Image *image,
 
         channel=GetPixelChannelMapChannel(image,i);
         traits=GetPixelChannelMapTraits(image,channel);
-        if ((traits & UpdatePixelTrait) != 0)
-          q[i]=ClampToQuantum(QuantumScale*((MagickRealType) q[i]*
-            HighlightFactor+(MagickRealType) foreground*(QuantumRange-
-            HighlightFactor)));
+        if ((traits & UpdatePixelTrait) == 0)
+          continue;
+        q[i]=ClampToQuantum(QuantumScale*((MagickRealType) q[i]*HighlightFactor+
+          (MagickRealType) foreground*(QuantumRange-HighlightFactor)));
       }
       q+=GetPixelChannels(image);
     }
     for ( ; x < (ssize_t) (image->columns-y); x++)
     {
+      if (GetPixelMask(image,q) != 0)
+        {
+          q+=GetPixelChannels(image);
+          continue;
+        }
       for (i=0; i < (ssize_t) GetPixelChannels(image); i++)
       {
         PixelChannel
@@ -732,15 +747,21 @@ MagickExport MagickBooleanType RaiseImage(Image *image,
 
         channel=GetPixelChannelMapChannel(image,i);
         traits=GetPixelChannelMapTraits(image,channel);
-        if ((traits & UpdatePixelTrait) != 0)
-          q[i]=ClampToQuantum(QuantumScale*((MagickRealType) q[i]*
-            AccentuateFactor+(MagickRealType) foreground*(QuantumRange-
-            AccentuateFactor)));
+        if ((traits & UpdatePixelTrait) == 0)
+          continue;
+        q[i]=ClampToQuantum(QuantumScale*((MagickRealType) q[i]*
+          AccentuateFactor+(MagickRealType) foreground*(QuantumRange-
+          AccentuateFactor)));
       }
       q+=GetPixelChannels(image);
     }
     for ( ; x < (ssize_t) image->columns; x++)
     {
+      if (GetPixelMask(image,q) != 0)
+        {
+          q+=GetPixelChannels(image);
+          continue;
+        }
       for (i=0; i < (ssize_t) GetPixelChannels(image); i++)
       {
         PixelChannel
@@ -751,10 +772,10 @@ MagickExport MagickBooleanType RaiseImage(Image *image,
 
         channel=GetPixelChannelMapChannel(image,i);
         traits=GetPixelChannelMapTraits(image,channel);
-        if ((traits & UpdatePixelTrait) != 0)
-          q[i]=ClampToQuantum(QuantumScale*((MagickRealType) q[i]*
-            ShadowFactor+(MagickRealType) background*(QuantumRange-
-            ShadowFactor)));
+        if ((traits & UpdatePixelTrait) == 0)
+          continue;
+        q[i]=ClampToQuantum(QuantumScale*((MagickRealType) q[i]*ShadowFactor+
+          (MagickRealType) background*(QuantumRange-ShadowFactor)));
       }
       q+=GetPixelChannels(image);
     }
@@ -792,6 +813,11 @@ MagickExport MagickBooleanType RaiseImage(Image *image,
       }
     for (x=0; x < (ssize_t) raise_info->width; x++)
     {
+      if (GetPixelMask(image,q) != 0)
+        {
+          q+=GetPixelChannels(image);
+          continue;
+        }
       for (i=0; i < (ssize_t) GetPixelChannels(image); i++)
       {
         PixelChannel
@@ -802,10 +828,10 @@ MagickExport MagickBooleanType RaiseImage(Image *image,
 
         channel=GetPixelChannelMapChannel(image,i);
         traits=GetPixelChannelMapTraits(image,channel);
-        if ((traits & UpdatePixelTrait) != 0)
-          q[i]=ClampToQuantum(QuantumScale*((MagickRealType) q[i]*
-            HighlightFactor+(MagickRealType) foreground*(QuantumRange-
-            HighlightFactor)));
+        if ((traits & UpdatePixelTrait) == 0)
+          continue;
+        q[i]=ClampToQuantum(QuantumScale*((MagickRealType) q[i]*HighlightFactor+
+          (MagickRealType) foreground*(QuantumRange-HighlightFactor)));
       }
       q+=GetPixelChannels(image);
     }
@@ -813,6 +839,11 @@ MagickExport MagickBooleanType RaiseImage(Image *image,
       q+=GetPixelChannels(image);
     for ( ; x < (ssize_t) image->columns; x++)
     {
+      if (GetPixelMask(image,q) != 0)
+        {
+          q+=GetPixelChannels(image);
+          continue;
+        }
       for (i=0; i < (ssize_t) GetPixelChannels(image); i++)
       {
         PixelChannel
@@ -823,10 +854,10 @@ MagickExport MagickBooleanType RaiseImage(Image *image,
 
         channel=GetPixelChannelMapChannel(image,i);
         traits=GetPixelChannelMapTraits(image,channel);
-        if ((traits & UpdatePixelTrait) != 0)
-          q[i]=ClampToQuantum(QuantumScale*((MagickRealType) q[i]*
-            ShadowFactor+(MagickRealType) background*(QuantumRange-
-            ShadowFactor)));
+        if ((traits & UpdatePixelTrait) == 0)
+          continue;
+        q[i]=ClampToQuantum(QuantumScale*((MagickRealType) q[i]*ShadowFactor+
+          (MagickRealType) background*(QuantumRange-ShadowFactor)));
       }
       q+=GetPixelChannels(image);
     }
@@ -864,6 +895,11 @@ MagickExport MagickBooleanType RaiseImage(Image *image,
       }
     for (x=0; x < (ssize_t) (image->rows-y); x++)
     {
+      if (GetPixelMask(image,q) != 0)
+        {
+          q+=GetPixelChannels(image);
+          continue;
+        }
       for (i=0; i < (ssize_t) GetPixelChannels(image); i++)
       {
         PixelChannel
@@ -874,10 +910,10 @@ MagickExport MagickBooleanType RaiseImage(Image *image,
 
         channel=GetPixelChannelMapChannel(image,i);
         traits=GetPixelChannelMapTraits(image,channel);
-        if ((traits & UpdatePixelTrait) != 0)
-          q[i]=ClampToQuantum(QuantumScale*((MagickRealType) q[i]*
-            HighlightFactor+(MagickRealType) foreground*(QuantumRange-
-            HighlightFactor)));
+        if ((traits & UpdatePixelTrait) == 0)
+          continue;
+        q[i]=ClampToQuantum(QuantumScale*((MagickRealType) q[i]*HighlightFactor+
+          (MagickRealType) foreground*(QuantumRange-HighlightFactor)));
       }
       q+=GetPixelChannels(image);
     }
@@ -893,15 +929,20 @@ MagickExport MagickBooleanType RaiseImage(Image *image,
 
         channel=GetPixelChannelMapChannel(image,i);
         traits=GetPixelChannelMapTraits(image,channel);
-        if ((traits & UpdatePixelTrait) != 0)
-          q[i]=ClampToQuantum(QuantumScale*((MagickRealType) q[i]*
-            TroughFactor+(MagickRealType) background*(QuantumRange-
-            TroughFactor)));
+        if ((traits & UpdatePixelTrait) == 0)
+          continue;
+        q[i]=ClampToQuantum(QuantumScale*((MagickRealType) q[i]*TroughFactor+
+          (MagickRealType) background*(QuantumRange-TroughFactor)));
       }
       q+=GetPixelChannels(image);
     }
     for ( ; x < (ssize_t) image->columns; x++)
     {
+      if (GetPixelMask(image,q) != 0)
+        {
+          q+=GetPixelChannels(image);
+          continue;
+        }
       for (i=0; i < (ssize_t) GetPixelChannels(image); i++)
       {
         PixelChannel
@@ -912,10 +953,10 @@ MagickExport MagickBooleanType RaiseImage(Image *image,
 
         channel=GetPixelChannelMapChannel(image,i);
         traits=GetPixelChannelMapTraits(image,channel);
-        if ((traits & UpdatePixelTrait) != 0)
-          q[i]=ClampToQuantum(QuantumScale*((MagickRealType) q[i]*
-            ShadowFactor+(MagickRealType) background*(QuantumRange-
-            ShadowFactor)));
+        if ((traits & UpdatePixelTrait) == 0)
+          continue;
+        q[i]=ClampToQuantum(QuantumScale*((MagickRealType) q[i]*ShadowFactor+
+          (MagickRealType) background*(QuantumRange-ShadowFactor)));
       }
       q+=GetPixelChannels(image);
     }
@@ -927,7 +968,7 @@ MagickExport MagickBooleanType RaiseImage(Image *image,
           proceed;
 
 #if defined(MAGICKCORE_OPENMP_SUPPORT)
-  #pragma omp critical (MagickCore_RaiseImage)
+        #pragma omp critical (MagickCore_RaiseImage)
 #endif
         proceed=SetImageProgress(image,RaiseImageTag,progress++,image->rows);
         if (proceed == MagickFalse)