]> granicus.if.org Git - imagemagick/commitdiff
Return linear grayscale for -colorspace RGB -colorspace gray
authorCristy <urban-warrior@imagemagick.org>
Sun, 10 Dec 2017 01:17:08 +0000 (20:17 -0500)
committerCristy <urban-warrior@imagemagick.org>
Sun, 10 Dec 2017 01:17:08 +0000 (20:17 -0500)
MagickCore/colorspace.c

index e2f1bdf2ec7224f497cd3a720cc1d05d6760505a..c281918a218e2ad55204a58ab3d24120bf1474fd 100644 (file)
@@ -320,8 +320,8 @@ static MagickBooleanType sRGBTransformImage(Image *image,
           status=MagickFalse;
       }
       image_view=DestroyCacheView(image_view);
-      image->type=image->alpha_trait == UndefinedPixelTrait ? ColorSeparationType :
-        ColorSeparationAlphaType;
+      image->type=image->alpha_trait == UndefinedPixelTrait ?
+        ColorSeparationType : ColorSeparationAlphaType;
       if (SetImageColorspace(image,colorspace,exception) == MagickFalse)
         return(MagickFalse);
       return(status);
@@ -1094,14 +1094,14 @@ MagickExport MagickBooleanType SetImageColorspace(Image *image,
   assert(exception->signature == MagickCoreSignature);
   if (image->colorspace == colorspace)
     return(MagickTrue);
-  image->colorspace=colorspace;
   image->rendering_intent=UndefinedIntent;
   image->gamma=1.000/2.200;
   (void) ResetMagickMemory(&image->chromaticity,0,sizeof(image->chromaticity));
   type=image->type;
   if (IsGrayColorspace(colorspace) != MagickFalse)
     {
-      if ((image->intensity == Rec601LuminancePixelIntensityMethod) ||
+      if ((IsRGBColorspace(image->colorspace) != MagickFalse) ||
+          (image->intensity == Rec601LuminancePixelIntensityMethod) ||
           (image->intensity == Rec709LuminancePixelIntensityMethod))
         image->gamma=1.000;
       type=GrayscaleType;
@@ -1126,6 +1126,7 @@ MagickExport MagickBooleanType SetImageColorspace(Image *image,
         image->chromaticity.white_point.y=0.3290;
         image->chromaticity.white_point.z=0.3583;
       }
+  image->colorspace=colorspace;
   status=SyncImagePixelCache(image,exception);
   image->type=type;
   return(status);
@@ -1284,6 +1285,12 @@ MagickExport MagickBooleanType TransformImageColorspace(Image *image,
   if ((image->colorspace == GRAYColorspace) && (image->gamma != 1.0) &&
       (colorspace == sRGBColorspace))
     return(SetImageColorspace(image,colorspace,exception));
+  if ((image->colorspace == RGBColorspace) && (image->gamma != 1.0) &&
+      (colorspace == RGBColorspace))
+    return(SetImageColorspace(image,colorspace,exception));
+  if ((image->colorspace == RGBColorspace) && (image->gamma == 1.0) &&
+      (colorspace == GRAYColorspace))
+    return(SetImageColorspace(image,colorspace,exception));
   if (colorspace == UndefinedColorspace)
     return(SetImageColorspace(image,colorspace,exception));
   /*