From cb228bb3ff8da73ec82aa72dee9d4a6309bc7eed Mon Sep 17 00:00:00 2001 From: cristy Date: Sun, 14 Sep 2014 21:17:36 +0000 Subject: [PATCH] --- MagickCore/decorate.c | 6 ++++-- MagickCore/morphology.c | 21 ++++++++++----------- MagickCore/transform.c | 22 ++++++++++++++++++++++ 3 files changed, 36 insertions(+), 13 deletions(-) diff --git a/MagickCore/decorate.c b/MagickCore/decorate.c index 77fded24b..fc7faa2c8 100644 --- a/MagickCore/decorate.c +++ b/MagickCore/decorate.c @@ -462,9 +462,11 @@ MagickExport Image *FrameImage(const Image *image,const FrameInfo *frame_info, { PixelChannel channel=GetPixelChannelChannel(image,i); PixelTrait traits=GetPixelChannelTraits(image,channel); - if ((traits & (CopyPixelTrait | UpdatePixelTrait)) == 0) + PixelTrait frame_traits=GetPixelChannelTraits(frame_image,channel); + if ((traits == UndefinedPixelTrait) || + (frame_traits == UndefinedPixelTrait)) continue; - q[i]=p[i]; + SetPixelChannel(frame_image,channel,p[i],q); } SetPixelRed(frame_image,GetPixelRed(image,p),q); SetPixelGreen(frame_image,GetPixelGreen(image,p),q); diff --git a/MagickCore/morphology.c b/MagickCore/morphology.c index 51aed6b0e..e74def43d 100644 --- a/MagickCore/morphology.c +++ b/MagickCore/morphology.c @@ -2880,8 +2880,7 @@ static ssize_t MorphologyPrimitive(const Image *image,Image *morphology_image, if ((traits == UndefinedPixelTrait) || (morphology_traits == UndefinedPixelTrait)) continue; - if (((morphology_traits & CopyPixelTrait) != 0) || - (GetPixelReadMask(image,p+center) == 0)) + if (GetPixelReadMask(image,p+center) == 0) { SetPixelChannel(morphology_image,channel,p[center+i],q); continue; @@ -2932,7 +2931,6 @@ static ssize_t MorphologyPrimitive(const Image *image,Image *morphology_image, http://www.cs.umd.edu/~djacobs/CMSC426/Convolution.pdf */ k=(&kernel->values[kernel->width*kernel->height-1]); - count=0; if ((morphology_traits & BlendPixelTrait) == 0) { /* @@ -2943,10 +2941,7 @@ static ssize_t MorphologyPrimitive(const Image *image,Image *morphology_image, for (u=0; u < (ssize_t) kernel->width; u++) { if (IfNaN(*k) == MagickFalse) - { - pixel+=(*k)*pixels[i]; - count++; - } + pixel+=(*k)*pixels[i]; k--; pixels+=GetPixelChannels(image); } @@ -2957,15 +2952,19 @@ static ssize_t MorphologyPrimitive(const Image *image,Image *morphology_image, /* Alpha blending. */ + count=0; + gamma=0.0; + alpha=1.0; for (v=0; v < (ssize_t) kernel->height; v++) { for (u=0; u < (ssize_t) kernel->width; u++) { if (IfNaN(*k) == MagickFalse) { - alpha=(double) (QuantumScale*GetPixelAlpha(image,pixels)); - pixel+=(*k)*alpha*pixels[i]; - gamma+=(*k)*alpha; + if (channel != AlphaPixelChannel) + alpha=(double) (QuantumScale*GetPixelAlpha(image,pixels)); + pixel+=alpha*(*k)*pixels[i]; + gamma+=alpha*(*k); count++; } k--; @@ -3201,7 +3200,7 @@ static ssize_t MorphologyPrimitive(const Image *image,Image *morphology_image, p+=GetPixelChannels(image); q+=GetPixelChannels(morphology_image); } - if ( SyncCacheViewAuthenticPixels(morphology_view,exception) == MagickFalse) + if (SyncCacheViewAuthenticPixels(morphology_view,exception) == MagickFalse) status=MagickFalse; if (image->progress_monitor != (MagickProgressMonitor) NULL) { diff --git a/MagickCore/transform.c b/MagickCore/transform.c index 03fc439f3..cab89da7e 100644 --- a/MagickCore/transform.c +++ b/MagickCore/transform.c @@ -1745,6 +1745,12 @@ MagickExport Image *SpliceImage(const Image *image, splice_image=DestroyImage(splice_image); return((Image *) NULL); } + if ((IsPixelInfoGray(&splice_image->background_color) == MagickFalse) && + (IsGrayColorspace(splice_image->colorspace) != MagickFalse)) + (void) SetImageColorspace(splice_image,sRGBColorspace,exception); + if ((splice_image->background_color.alpha_trait == BlendPixelTrait) && + (splice_image->alpha_trait != BlendPixelTrait)) + (void) SetImageAlpha(splice_image,OpaqueAlpha,exception); (void) SetImageBackgroundColor(splice_image,exception); /* Respect image geometry. @@ -1854,6 +1860,10 @@ MagickExport Image *SpliceImage(const Image *image, continue; SetPixelChannel(splice_image,channel,p[i],q); } + SetPixelRed(splice_image,GetPixelRed(image,p),q); + SetPixelGreen(splice_image,GetPixelGreen(image,p),q); + SetPixelBlue(splice_image,GetPixelBlue(image,p),q); + SetPixelAlpha(splice_image,GetPixelAlpha(image,p),q); p+=GetPixelChannels(image); q+=GetPixelChannels(splice_image); } @@ -1881,6 +1891,10 @@ MagickExport Image *SpliceImage(const Image *image, continue; SetPixelChannel(splice_image,channel,p[i],q); } + SetPixelRed(splice_image,GetPixelRed(image,p),q); + SetPixelGreen(splice_image,GetPixelGreen(image,p),q); + SetPixelBlue(splice_image,GetPixelBlue(image,p),q); + SetPixelAlpha(splice_image,GetPixelAlpha(image,p),q); p+=GetPixelChannels(image); q+=GetPixelChannels(splice_image); } @@ -1951,6 +1965,10 @@ MagickExport Image *SpliceImage(const Image *image, continue; SetPixelChannel(splice_image,channel,p[i],q); } + SetPixelRed(splice_image,GetPixelRed(image,p),q); + SetPixelGreen(splice_image,GetPixelGreen(image,p),q); + SetPixelBlue(splice_image,GetPixelBlue(image,p),q); + SetPixelAlpha(splice_image,GetPixelAlpha(image,p),q); p+=GetPixelChannels(image); q+=GetPixelChannels(splice_image); } @@ -1978,6 +1996,10 @@ MagickExport Image *SpliceImage(const Image *image, continue; SetPixelChannel(splice_image,channel,p[i],q); } + SetPixelRed(splice_image,GetPixelRed(image,p),q); + SetPixelGreen(splice_image,GetPixelGreen(image,p),q); + SetPixelBlue(splice_image,GetPixelBlue(image,p),q); + SetPixelAlpha(splice_image,GetPixelAlpha(image,p),q); p+=GetPixelChannels(image); q+=GetPixelChannels(splice_image); } -- 2.50.1