From: Cristy Date: Tue, 27 Mar 2018 13:16:01 +0000 (-0400) Subject: ... X-Git-Tag: 7.0.7-29~293 X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=4e1e0e892e22510f9fe7740c0ec1ea089b15ac8a;p=imagemagick ... --- diff --git a/MagickCore/gem.c b/MagickCore/gem.c index a5b9e1422..6db3e47b4 100644 --- a/MagickCore/gem.c +++ b/MagickCore/gem.c @@ -463,10 +463,13 @@ MagickExport void ConvertHSLToRGB(const double hue,const double saturation, const double lightness,double *red,double *green,double *blue) { double - c, - h, - min, - x; + b, + g, + r, + v, + x, + y, + z; /* Convert HSL to RGB colorspace. @@ -474,66 +477,31 @@ MagickExport void ConvertHSLToRGB(const double hue,const double saturation, assert(red != (double *) NULL); assert(green != (double *) NULL); assert(blue != (double *) NULL); - h=hue*360.0; - if (lightness <= 0.5) - c=2.0*lightness*saturation; - else - c=(2.0-2.0*lightness)*saturation; - min=lightness-0.5*c; - h-=360.0*floor(h/360.0); - h/=60.0; - x=c*(1.0-fabs(h-2.0*floor(h/2.0)-1.0)); - switch ((int) floor(h)) - { - case 0: - { - *red=QuantumRange*(min+c); - *green=QuantumRange*(min+x); - *blue=QuantumRange*min; - break; - } - case 1: + if (saturation == 0.0) { - *red=QuantumRange*(min+x); - *green=QuantumRange*(min+c); - *blue=QuantumRange*min; - break; - } - case 2: - { - *red=QuantumRange*min; - *green=QuantumRange*(min+c); - *blue=QuantumRange*(min+x); - break; - } - case 3: - { - *red=QuantumRange*min; - *green=QuantumRange*(min+x); - *blue=QuantumRange*(min+c); - break; - } - case 4: - { - *red=QuantumRange*(min+x); - *green=QuantumRange*min; - *blue=QuantumRange*(min+c); - break; - } - case 5: - { - *red=QuantumRange*(min+c); - *green=QuantumRange*min; - *blue=QuantumRange*(min+x); - break; - } - default: - { - *red=0.0; - *green=0.0; - *blue=0.0; + *red=(double) QuantumRange*lightness; + *green=(double) QuantumRange*lightness; + *blue=(double) QuantumRange*lightness; + return; } + v=(lightness <= 0.5) ? (lightness*(1.0+saturation)) : (lightness+saturation- + lightness*saturation); + y=lightness+lightness-v; + x=y+(v-y)*(6.0*hue-(ssize_t) (6.0*hue)); + z=v-(v-y)*(6.0*hue-(ssize_t) (6.0*hue)); + switch ((ssize_t) (6.0*hue)) + { + case 0: r=v; g=x; b=y; break; + case 1: r=z; g=v; b=y; break; + case 2: r=y; g=v; b=x; break; + case 3: r=y; g=z; b=v; break; + case 4: r=x; g=y; b=v; break; + case 5: r=v; g=y; b=z; break; + default: r=v; g=x; b=y; break; } + *red=(double) QuantumRange*r; + *green=(double) QuantumRange*g; + *blue=(double) QuantumRange*b; } /*