diff --git a/MagickCore/channel.c b/MagickCore/channel.c
index d2d67e7..bd96b55 100644
--- a/MagickCore/channel.c
+++ b/MagickCore/channel.c
@@ -651,6 +651,7 @@
return((Image *) NULL);
}
separate_image->matte=MagickFalse;
+ (void) SetImageColorspace(separate_image,GRAYColorspace,exception);
/*
Separate image.
*/
@@ -697,6 +698,9 @@
SetPixelChannel(separate_image,GrayPixelChannel,0,q);
for (i=0; i < (ssize_t) GetPixelChannels(image); i++)
{
+ double
+ pixel;
+
PixelChannel
channel;
@@ -708,7 +712,11 @@
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 @@
}
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);
}