]> granicus.if.org Git - imagemagick/commitdiff
(no commit message)
authorcristy <urban-warrior@git.imagemagick.org>
Thu, 12 Jul 2012 17:34:52 +0000 (17:34 +0000)
committercristy <urban-warrior@git.imagemagick.org>
Thu, 12 Jul 2012 17:34:52 +0000 (17:34 +0000)
MagickCore/color.c

index 5581a07a3d33c7c36dcbc2c8332dcbad6ba6b437..63cae8b6012b2f8db984a7a472f9c01abd431adc 100644 (file)
@@ -2321,76 +2321,90 @@ MagickExport MagickBooleanType QueryColorCompliance(const char *name,
         color->colorspace=sRGBColorspace;  /* as required by SVG standard */
       SetGeometryInfo(&geometry_info);
       flags=ParseGeometry(name+i+1,&geometry_info);
-      if ((flags & PercentValue) != 0)
-        scale=(MagickRealType) (QuantumRange/100.0);
-      if ((flags & RhoValue) != 0)
-        color->red=(MagickRealType) ClampToQuantum(scale*geometry_info.rho);
-      if ((flags & SigmaValue) != 0)
-        color->green=(MagickRealType) ClampToQuantum(scale*geometry_info.sigma);
-      if ((flags & XiValue) != 0)
-        color->blue=(MagickRealType) ClampToQuantum(scale*geometry_info.xi);
-      color->alpha=(MagickRealType) OpaqueAlpha;
-      if ((flags & PsiValue) != 0)
-        {
-          if (color->colorspace == CMYKColorspace)
-            color->black=(MagickRealType) ClampToQuantum(scale*
-              geometry_info.psi);
-          else
-            if (color->matte != MagickFalse)
-              color->alpha=(MagickRealType) ClampToQuantum(QuantumRange*
-                geometry_info.psi);
-        }
-      if (((flags & ChiValue) != 0) && (color->matte != MagickFalse))
-        color->alpha=(MagickRealType) ClampToQuantum(QuantumRange*
-          geometry_info.chi);
-      if (LocaleCompare(colorspace,"gray") == 0)
+      if (flags == 0)
         {
-          color->colorspace=GRAYColorspace;
-          color->green=color->red;
-          color->blue=color->red;
-          if (((flags & SigmaValue) != 0) && (color->matte != MagickFalse))
-            color->alpha=(MagickRealType) ClampToQuantum(QuantumRange*
-              geometry_info.sigma);
+          char
+            *colorname;
+
+          colorname=AcquireString(name+i+1);
+          (void) SubstituteString(&colorname,")","");
+          (void) QueryColorCompliance(colorname,AllCompliance,color,exception);
+          colorname=DestroyString(colorname);
         }
-      if ((LocaleCompare(colorspace,"HSB") == 0) ||
-          (LocaleCompare(colorspace,"HSL") == 0) ||
-          (LocaleCompare(colorspace,"HWB") == 0))
+      else
         {
-          PixelInfo
-            pixel;
-
-          if (LocaleCompare(colorspace,"HSB") == 0)
-            color->colorspace=HSBColorspace;
-          if (LocaleCompare(colorspace,"HSL") == 0)
-            color->colorspace=HSLColorspace;
-          if (LocaleCompare(colorspace,"HWB") == 0)
-            color->colorspace=HWBColorspace;
-          scale=1.0/360.0;
-          if ((flags & PercentValue) != 0)
-            scale=1.0/100.0;
-          geometry_info.rho*=360.0*scale;
-          scale=1.0/255.0;
           if ((flags & PercentValue) != 0)
-            scale=1.0/100.0;
-          geometry_info.sigma*=scale;
-          geometry_info.xi*=scale;
-          if (LocaleCompare(colorspace,"HSB") == 0)
-            ConvertHSBToRGB(fmod(fmod(geometry_info.rho,360.0)+360.0,360.0)/
-              360.0,geometry_info.sigma,geometry_info.xi,&pixel.red,
-              &pixel.green,&pixel.blue);
-          else
-            if (LocaleCompare(colorspace,"HSL") == 0)
-              ConvertHSLToRGB(fmod(fmod(geometry_info.rho,360.0)+360.0,360.0)/
-                360.0,geometry_info.sigma,geometry_info.xi,&pixel.red,
-                &pixel.green,&pixel.blue);
-            else
-              ConvertHWBToRGB(fmod(fmod(geometry_info.rho,360.0)+360.0,360.0)/
-                360.0,geometry_info.sigma,geometry_info.xi,&pixel.red,
-                &pixel.green,&pixel.blue);
-          color->colorspace=sRGBColorspace;
-          color->red=(MagickRealType) pixel.red;
-          color->green=(MagickRealType) pixel.green;
-          color->blue=(MagickRealType) pixel.blue;
+            scale=(MagickRealType) (QuantumRange/100.0);
+          if ((flags & RhoValue) != 0)
+            color->red=(MagickRealType) ClampToQuantum(scale*geometry_info.rho);
+          if ((flags & SigmaValue) != 0)
+            color->green=(MagickRealType) ClampToQuantum(scale*
+              geometry_info.sigma);
+          if ((flags & XiValue) != 0)
+            color->blue=(MagickRealType) ClampToQuantum(scale*geometry_info.xi);
+          color->alpha=(MagickRealType) OpaqueAlpha;
+          if ((flags & PsiValue) != 0)
+            {
+              if (color->colorspace == CMYKColorspace)
+                color->black=(MagickRealType) ClampToQuantum(scale*
+                  geometry_info.psi);
+              else
+                if (color->matte != MagickFalse)
+                  color->alpha=(MagickRealType) ClampToQuantum(QuantumRange*
+                    geometry_info.psi);
+            }
+          if (((flags & ChiValue) != 0) && (color->matte != MagickFalse))
+            color->alpha=(MagickRealType) ClampToQuantum(QuantumRange*
+              geometry_info.chi);
+          if (LocaleCompare(colorspace,"gray") == 0)
+            {
+              color->colorspace=GRAYColorspace;
+              color->green=color->red;
+              color->blue=color->red;
+              if (((flags & SigmaValue) != 0) && (color->matte != MagickFalse))
+                color->alpha=(MagickRealType) ClampToQuantum(QuantumRange*
+                  geometry_info.sigma);
+            }
+          if ((LocaleCompare(colorspace,"HSB") == 0) ||
+              (LocaleCompare(colorspace,"HSL") == 0) ||
+              (LocaleCompare(colorspace,"HWB") == 0))
+            {
+              PixelInfo
+                pixel;
+
+              if (LocaleCompare(colorspace,"HSB") == 0)
+                color->colorspace=HSBColorspace;
+              if (LocaleCompare(colorspace,"HSL") == 0)
+                color->colorspace=HSLColorspace;
+              if (LocaleCompare(colorspace,"HWB") == 0)
+                color->colorspace=HWBColorspace;
+              scale=1.0/360.0;
+              if ((flags & PercentValue) != 0)
+                scale=1.0/100.0;
+              geometry_info.rho*=360.0*scale;
+              scale=1.0/255.0;
+              if ((flags & PercentValue) != 0)
+                scale=1.0/100.0;
+              geometry_info.sigma*=scale;
+              geometry_info.xi*=scale;
+              if (LocaleCompare(colorspace,"HSB") == 0)
+                ConvertHSBToRGB(fmod(fmod(geometry_info.rho,360.0)+360.0,360.0)/
+                  360.0,geometry_info.sigma,geometry_info.xi,&pixel.red,
+                  &pixel.green,&pixel.blue);
+              else
+                if (LocaleCompare(colorspace,"HSL") == 0)
+                  ConvertHSLToRGB(fmod(fmod(geometry_info.rho,360.0)+360.0,
+                    360.0)/360.0,geometry_info.sigma,geometry_info.xi,
+                    &pixel.red,&pixel.green,&pixel.blue);
+                else
+                  ConvertHWBToRGB(fmod(fmod(geometry_info.rho,360.0)+360.0,
+                    360.0)/360.0,geometry_info.sigma,geometry_info.xi,
+                    &pixel.red,&pixel.green,&pixel.blue);
+              color->colorspace=sRGBColorspace;
+              color->red=(MagickRealType) pixel.red;
+              color->green=(MagickRealType) pixel.green;
+              color->blue=(MagickRealType) pixel.blue;
+            }
         }
       return(MagickTrue);
     }