]> granicus.if.org Git - imagemagick/blobdiff - MagickCore/channel.c
(no commit message)
[imagemagick] / MagickCore / channel.c
index d2d67e7ee7c611b0a6fd6ca28f8fa26cc8bc9bb1..bd96b55cf461fbd5a74ea7fd7d14c15d32fe3be0 100644 (file)
@@ -651,6 +651,7 @@ MagickExport Image *SeparateImage(const Image *image,
       return((Image *) NULL);
     }
   separate_image->matte=MagickFalse;
+  (void) SetImageColorspace(separate_image,GRAYColorspace,exception);
   /*
     Separate image.
   */
@@ -697,6 +698,9 @@ MagickExport Image *SeparateImage(const Image *image,
       SetPixelChannel(separate_image,GrayPixelChannel,0,q);
       for (i=0; i < (ssize_t) GetPixelChannels(image); i++)
       {
+        double
+          pixel;
+
         PixelChannel
           channel;
 
@@ -708,7 +712,11 @@ MagickExport Image *SeparateImage(const Image *image,
         if ((traits == UndefinedPixelTrait) ||
             (GetChannelBit(channel_type,channel) == 0))
           continue;
-        SetPixelChannel(separate_image,GrayPixelChannel,p[i],q);
+        pixel=p[i];
+        if (IssRGBColorspace(image->colorspace) != MagickFalse)
+          pixel=InversesRGBCompandor(pixel);
+        SetPixelChannel(separate_image,GrayPixelChannel,ClampToQuantum(pixel),
+          q);
       }
       p+=GetPixelChannels(image);
       q+=GetPixelChannels(separate_image);
@@ -730,10 +738,6 @@ MagickExport Image *SeparateImage(const Image *image,
   }
   separate_view=DestroyCacheView(separate_view);
   image_view=DestroyCacheView(image_view);
-  if (IssRGBColorspace(image->colorspace) == MagickFalse)
-    (void) SetImageColorspace(separate_image,GRAYColorspace,exception);
-  else
-    (void) TransformImageColorspace(separate_image,GRAYColorspace,exception);
   return(separate_image);
 }
 \f