From: cristy Date: Mon, 19 Sep 2011 00:19:19 +0000 (+0000) Subject: (no commit message) X-Git-Tag: 7.0.1-0~6986 X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=a13d082db6d9e8a648b8346f86d06959b55817f8;p=imagemagick --- diff --git a/MagickCore/enhance.c b/MagickCore/enhance.c index 6aa4dc6cb..c9ea75d6d 100644 --- a/MagickCore/enhance.c +++ b/MagickCore/enhance.c @@ -140,7 +140,7 @@ MagickExport MagickBooleanType AutoGammaImage(Image *image, traits=GetPixelChannelMapTraits(image,(PixelChannel) i); if ((traits & UpdatePixelTrait) == 0) continue; - channel_mask=SetPixelChannelMask(image,(ChannelType) i); + channel_mask=SetPixelChannelMask(image,(ChannelType) (1 << i)); status=GetImageMean(image,&mean,&sans,exception); gamma=log(mean*QuantumScale)/log_mean; status&=LevelImage(image,0.0,(double) QuantumRange,gamma,exception); diff --git a/MagickCore/histogram.c b/MagickCore/histogram.c index 36bac7578..ea7e2a621 100644 --- a/MagickCore/histogram.c +++ b/MagickCore/histogram.c @@ -1020,7 +1020,7 @@ MagickExport MagickBooleanType MinMaxStretchImage(Image *image, traits=GetPixelChannelMapTraits(image,(PixelChannel) i); if ((traits & UpdatePixelTrait) == 0) continue; - channel_mask=SetPixelChannelMask(image,i); + channel_mask=SetPixelChannelMask(image,(ChannelType) (1 << i)); status&=GetImageRange(image,&min,&max,exception); min+=black; max-=white; diff --git a/MagickCore/image.c b/MagickCore/image.c index 827bedc31..96d088fd2 100644 --- a/MagickCore/image.c +++ b/MagickCore/image.c @@ -1882,7 +1882,7 @@ MagickExport MagickBooleanType IsHighDynamicRangeImage(const Image *image, traits=GetPixelChannelMapTraits(image,(PixelChannel) i); if (traits == UndefinedPixelTrait) continue; - pixel=(MagickRealType) p[i]; + pixel=(MagickRealType) p[i]; if ((pixel < 0.0) || (pixel > QuantumRange) || (pixel != (QuantumAny) pixel)) break; @@ -2310,35 +2310,24 @@ MagickExport MagickBooleanType SeparateImage(Image *image) } for (x=0; x < (ssize_t) image->columns; x++) { - if ((GetPixelRedTraits(image) & UpdatePixelTrait) != 0) - { - SetPixelGreen(image,GetPixelRed(image,q),q); - SetPixelBlue(image,GetPixelRed(image,q),q); - } - if ((GetPixelGreenTraits(image) & UpdatePixelTrait) != 0) - { - SetPixelRed(image,GetPixelGreen(image,q),q); - SetPixelBlue(image,GetPixelGreen(image,q),q); - } - if ((GetPixelBlueTraits(image) & UpdatePixelTrait) != 0) - { - SetPixelRed(image,GetPixelBlue(image,q),q); - SetPixelGreen(image,GetPixelBlue(image,q),q); - } - if (((GetPixelBlackTraits(image) & UpdatePixelTrait) != 0) && - (image->colorspace == CMYKColorspace)) - { - SetPixelRed(image,GetPixelBlack(image,q),q); - SetPixelGreen(image,GetPixelBlack(image,q),q); - SetPixelBlue(image,GetPixelBlack(image,q),q); - } - if (((GetPixelAlphaTraits(image) & UpdatePixelTrait) != 0) && - (image->matte != MagickFalse)) - { - SetPixelRed(image,GetPixelAlpha(image,q),q); - SetPixelGreen(image,GetPixelAlpha(image,q),q); - SetPixelBlue(image,GetPixelAlpha(image,q),q); - } + register ssize_t + i; + + for (i=0; i < (ssize_t) GetPixelChannels(image); i++) + { + PixelTrait + traits; + + register ssize_t + j; + + traits=GetPixelChannelMapTraits(image,(PixelChannel) i); + if (traits == UndefinedPixelTrait) + continue; + if ((traits & UpdatePixelTrait) != 0) + for (j=0; j < (ssize_t) GetPixelChannels(image); j++) + q[j]=q[i]; + } q+=GetPixelChannels(image); } if (SyncCacheViewAuthenticPixels(image_view,exception) == MagickFalse) @@ -2396,52 +2385,35 @@ MagickExport Image *SeparateImages(const Image *image,ExceptionInfo *exception) *images, *separate_image; + register ssize_t + i; + assert(image != (Image *) NULL); assert(image->signature == MagickSignature); if (image->debug != MagickFalse) (void) LogMagickEvent(TraceEvent,GetMagickModule(),"%s",image->filename); images=NewImageList(); - if ((GetPixelRedTraits(image) & UpdatePixelTrait) != 0) - { - separate_image=CloneImage(image,0,0,MagickTrue,exception); - channel_mask=SetPixelChannelMask(separate_image,RedChannel); - (void) SeparateImage(separate_image); - (void) SetPixelChannelMap(separate_image,channel_mask); - AppendImageToList(&images,separate_image); - } - if ((GetPixelGreenTraits(image) & UpdatePixelTrait) != 0) - { - separate_image=CloneImage(image,0,0,MagickTrue,exception); - channel_mask=SetPixelChannelMask(separate_image,GreenChannel); - (void) SeparateImage(separate_image); - (void) SetPixelChannelMap(separate_image,channel_mask); - AppendImageToList(&images,separate_image); - } - if ((GetPixelBlueTraits(image) & UpdatePixelTrait) != 0) - { - separate_image=CloneImage(image,0,0,MagickTrue,exception); - channel_mask=SetPixelChannelMask(separate_image,BlueChannel); - (void) SeparateImage(separate_image); - (void) SetPixelChannelMap(separate_image,channel_mask); - AppendImageToList(&images,separate_image); - } - if (((GetPixelBlackTraits(image) & UpdatePixelTrait) != 0) && - (image->colorspace == CMYKColorspace)) - { - separate_image=CloneImage(image,0,0,MagickTrue,exception); - channel_mask=SetPixelChannelMask(separate_image,BlackChannel); - (void) SeparateImage(separate_image); - (void) SetPixelChannelMap(separate_image,channel_mask); - AppendImageToList(&images,separate_image); - } - if ((GetPixelAlphaTraits(image) & UpdatePixelTrait) != 0) - { - separate_image=CloneImage(image,0,0,MagickTrue,exception); - channel_mask=SetPixelChannelMask(separate_image,AlphaChannel); - (void) SeparateImage(separate_image); - (void) SetPixelChannelMap(separate_image,channel_mask); - AppendImageToList(&images,separate_image); - } + for (i=0; i < (ssize_t) GetPixelChannels(image); i++) + { + PixelTrait + traits; + + traits=GetPixelChannelMapTraits(image,(PixelChannel) i); + if (traits == UndefinedPixelTrait) + continue; + if ((traits & UpdatePixelTrait) != 0) + { + separate_image=CloneImage(image,0,0,MagickTrue,exception); + if (separate_image != (Image *) NULL) + { + channel_mask=SetPixelChannelMask(separate_image, + (ChannelType) (1 << i)); + (void) SeparateImage(separate_image); + (void) SetPixelChannelMap(separate_image,channel_mask); + AppendImageToList(&images,separate_image); + } + } + } return(images); } @@ -2524,9 +2496,9 @@ MagickExport MagickBooleanType SetImageAlphaChannel(Image *image, ConvertRGBToCMYK(&background); SetPacketPixelInfo(image,&background,&pixel); image_view=AcquireCacheView(image); - #if defined(MAGICKCORE_OPENMP_SUPPORT) - #pragma omp parallel for schedule(dynamic,4) shared(status) - #endif +#if defined(MAGICKCORE_OPENMP_SUPPORT) + #pragma omp parallel for schedule(dynamic,4) shared(status) +#endif for (y=0; y < (ssize_t) image->rows; y++) { register Quantum @@ -2547,13 +2519,7 @@ MagickExport MagickBooleanType SetImageAlphaChannel(Image *image, for (x=0; x < (ssize_t) image->columns; x++) { if (GetPixelAlpha(image,q) == TransparentAlpha) - { - SetPixelRed(image,pixel.red,q); - SetPixelGreen(image,pixel.green,q); - SetPixelBlue(image,pixel.blue,q); - if (image->colorspace == CMYKColorspace) - SetPixelBlack(image,pixel.black,q); - } + SetPixelPixelInfo(image,&background,q); q+=GetPixelChannels(image); } if (SyncCacheViewAuthenticPixels(image_view,exception) == MagickFalse) @@ -2712,16 +2678,7 @@ MagickExport MagickBooleanType SetImageBackgroundColor(Image *image) } for (x=0; x < (ssize_t) image->columns; x++) { - if ((GetPixelRedTraits(image) & UpdatePixelTrait) != 0) - SetPixelRed(image,ClampToQuantum(background.red),q); - if ((GetPixelGreenTraits(image) & UpdatePixelTrait) != 0) - SetPixelGreen(image,ClampToQuantum(background.green),q); - if ((GetPixelBlueTraits(image) & UpdatePixelTrait) != 0) - SetPixelBlue(image,ClampToQuantum(background.blue),q); - if ((GetPixelBlackTraits(image) & UpdatePixelTrait) != 0) - SetPixelBlack(image,ClampToQuantum(background.black),q); - if ((GetPixelAlphaTraits(image) & CopyPixelTrait) != 0) - SetPixelAlpha(image,ClampToQuantum(background.alpha),q); + SetPixelPixelInfo(image,&background,q); q+=GetPixelChannels(image); } if (SyncCacheViewAuthenticPixels(image_view,exception) == MagickFalse) diff --git a/MagickCore/pixel-accessor.h b/MagickCore/pixel-accessor.h index ddd798932..5351d8ba0 100644 --- a/MagickCore/pixel-accessor.h +++ b/MagickCore/pixel-accessor.h @@ -418,13 +418,17 @@ static inline MagickBooleanType IsPixelPacketMonochrome( static inline void SetPacketPixelInfo(const Image *image, const PixelInfo *pixel_info,PixelPacket *packet) { - packet->red=ClampToQuantum(pixel_info->red); - packet->green=ClampToQuantum(pixel_info->green); - packet->blue=ClampToQuantum(pixel_info->blue); - packet->alpha=ClampToQuantum(pixel_info->alpha); - if (image->colorspace == CMYKColorspace) + if ((image->channel_map[RedPixelChannel].traits & UpdatePixelTrait) != 0) + packet->red=ClampToQuantum(pixel_info->red); + if ((image->channel_map[GreenPixelChannel].traits & UpdatePixelTrait) != 0) + packet->green=ClampToQuantum(pixel_info->green); + if ((image->channel_map[BluePixelChannel].traits & UpdatePixelTrait) != 0) + packet->blue=ClampToQuantum(pixel_info->blue); + if ((image->channel_map[BlackPixelChannel].traits & UpdatePixelTrait) != 0) packet->black=ClampToQuantum(pixel_info->black); - if (image->storage_class == PseudoClass) + if ((image->channel_map[AlphaPixelChannel].traits & CopyPixelTrait) != 0) + packet->alpha=ClampToQuantum(pixel_info->alpha); + if ((image->channel_map[IndexPixelChannel].traits & CopyPixelTrait) != 0) packet->index=ClampToQuantum(pixel_info->index); } @@ -554,13 +558,17 @@ static inline void SetPixelIndexTraits(Image *image,const PixelTrait traits) static inline void SetPixelInfo(const Image *image,const Quantum *pixel, PixelInfo *pixel_info) { - pixel_info->red=(MagickRealType) GetPixelRed(image,pixel); - pixel_info->green=(MagickRealType) GetPixelGreen(image,pixel); - pixel_info->blue=(MagickRealType) GetPixelBlue(image,pixel); - pixel_info->alpha=(MagickRealType) GetPixelAlpha(image,pixel); - if (image->colorspace == CMYKColorspace) + if ((image->channel_map[RedPixelChannel].traits & UpdatePixelTrait) != 0) + pixel_info->red=(MagickRealType) GetPixelRed(image,pixel); + if ((image->channel_map[GreenPixelChannel].traits & UpdatePixelTrait) != 0) + pixel_info->green=(MagickRealType) GetPixelGreen(image,pixel); + if ((image->channel_map[BluePixelChannel].traits & UpdatePixelTrait) != 0) + pixel_info->blue=(MagickRealType) GetPixelBlue(image,pixel); + if ((image->channel_map[BlackPixelChannel].traits & UpdatePixelTrait) != 0) pixel_info->black=(MagickRealType) GetPixelBlack(image,pixel); - if (image->storage_class == PseudoClass) + if ((image->channel_map[AlphaPixelChannel].traits & CopyPixelTrait) != 0) + pixel_info->alpha=(MagickRealType) GetPixelAlpha(image,pixel); + if ((image->channel_map[IndexPixelChannel].traits & CopyPixelTrait) != 0) pixel_info->index=(MagickRealType) GetPixelIndex(image,pixel); } @@ -592,8 +600,7 @@ static inline void SetPixelInfoPacket(const Image *image, static inline void SetPixelMagenta(const Image *image,const Quantum magenta, Quantum *pixel) { - pixel[image->channel_map[MagentaPixelChannel].channel]= - magenta; + pixel[image->channel_map[MagentaPixelChannel].channel]=magenta; } static inline void SetPixelMagentaTraits(Image *image,const PixelTrait traits) @@ -638,7 +645,8 @@ static inline void SetPixelPixelInfo(const Image *image, SetPixelRed(image,ClampToQuantum(pixel_info->red),packet); SetPixelGreen(image,ClampToQuantum(pixel_info->green),packet); SetPixelBlue(image,ClampToQuantum(pixel_info->blue),packet); - SetPixelAlpha(image,ClampToQuantum(pixel_info->alpha),packet); + if (image->matte != MagickFalse) + SetPixelAlpha(image,ClampToQuantum(pixel_info->alpha),packet); if (image->colorspace == CMYKColorspace) SetPixelBlack(image,ClampToQuantum(pixel_info->black),packet); }