From b7d3c0b84e45607fbef1b3eea1462b0939af68be Mon Sep 17 00:00:00 2001 From: cristy Date: Fri, 5 Apr 2013 15:59:08 +0000 Subject: [PATCH] --- MagickCore/colorspace.c | 70 +++++++++++++++++++++++++++++++++++++++-- 1 file changed, 68 insertions(+), 2 deletions(-) diff --git a/MagickCore/colorspace.c b/MagickCore/colorspace.c index b9f237eed..007d0dc1c 100644 --- a/MagickCore/colorspace.c +++ b/MagickCore/colorspace.c @@ -2579,10 +2579,10 @@ static MagickBooleanType TransformsRGBImage(Image *image, return(MagickFalse); return(status); } - case LCHColorspace: + case LCHabColorspace: { /* - Transform image from LCH to sRGB. + Transform image from LCHab to sRGB. */ if (image->storage_class == PseudoClass) { @@ -2644,6 +2644,72 @@ static MagickBooleanType TransformsRGBImage(Image *image, return(MagickFalse); return(status); } + case LCHColorspace: + case LCHuvColorspace: + { + /* + Transform image from LCHuv to sRGB. + */ + if (image->storage_class == PseudoClass) + { + if (SyncImage(image,exception) == MagickFalse) + return(MagickFalse); + if (SetImageStorageClass(image,DirectClass,exception) == MagickFalse) + return(MagickFalse); + } + image_view=AcquireAuthenticCacheView(image,exception); +#if defined(MAGICKCORE_OPENMP_SUPPORT) + #pragma omp parallel for schedule(static,4) shared(status) \ + magick_threads(image,image,image->rows,1) +#endif + for (y=0; y < (ssize_t) image->rows; y++) + { + MagickBooleanType + sync; + + register ssize_t + x; + + register Quantum + *restrict q; + + if (status == MagickFalse) + continue; + q=GetCacheViewAuthenticPixels(image_view,0,y,image->columns,1, + exception); + if (q == (Quantum *) NULL) + { + status=MagickFalse; + continue; + } + for (x=0; x < (ssize_t) image->columns; x++) + { + double + blue, + chroma, + green, + hue, + luma, + red; + + luma=(double) (QuantumScale*GetPixelRed(image,q)); + chroma=(double) (QuantumScale*GetPixelGreen(image,q)); + hue=(double) (QuantumScale*GetPixelBlue(image,q)); + ConvertLCHuvToRGB(luma,chroma,hue,&red,&green,&blue); + SetPixelRed(image,ClampToQuantum(EncodePixelGamma(red)),q); + SetPixelGreen(image,ClampToQuantum(EncodePixelGamma(green)),q); + SetPixelBlue(image,ClampToQuantum(EncodePixelGamma(blue)),q); + q+=GetPixelChannels(image); + } + sync=SyncCacheViewAuthenticPixels(image_view,exception); + if (sync == MagickFalse) + status=MagickFalse; + } + image_view=DestroyCacheView(image_view); + if (SetImageColorspace(image,sRGBColorspace,exception) == MagickFalse) + return(MagickFalse); + return(status); + } case LMSColorspace: { /* -- 2.40.0