From 76eb72fd36af6ff1a0343b6af84626fb8d10a579 Mon Sep 17 00:00:00 2001 From: Cristy Date: Sun, 27 Nov 2016 08:21:05 -0500 Subject: [PATCH] Revert write mask mod --- MagickCore/accelerate.c | 4 +- MagickCore/annotate.c | 56 --------- MagickCore/attribute.c | 11 +- MagickCore/channel.c | 71 ++--------- MagickCore/compare.c | 15 +-- MagickCore/composite.c | 245 +++++++++++++++++++++++++++++++++++- MagickCore/decorate.c | 16 +-- MagickCore/draw.c | 11 +- MagickCore/effect.c | 14 +-- MagickCore/enhance.c | 31 ++--- MagickCore/fx.c | 20 +-- MagickCore/image.c | 10 +- MagickCore/morphology.c | 14 +-- MagickCore/nt-base.c | 11 +- MagickCore/opencl.c | 66 ++-------- MagickCore/option.c | 4 +- MagickCore/paint.c | 7 +- MagickCore/property.c | 62 +++------ MagickCore/quantize.c | 9 +- MagickCore/quantum-export.c | 2 +- MagickCore/quantum-import.c | 2 +- MagickCore/resize.c | 18 +-- MagickCore/shear.c | 6 +- MagickCore/signature.c | 2 +- MagickCore/splay-tree.c | 2 +- MagickCore/statistic.c | 28 ++--- MagickCore/threshold.c | 18 +-- MagickCore/transform.c | 22 ++-- MagickCore/utility.c | 4 +- MagickWand/compare.c | 9 +- MagickWand/convert.c | 8 +- MagickWand/mogrify.c | 116 ++++++++--------- MagickWand/montage.c | 7 +- MagickWand/operation.c | 14 +-- 34 files changed, 479 insertions(+), 456 deletions(-) diff --git a/MagickCore/accelerate.c b/MagickCore/accelerate.c index e9a0f929c..cf8b1f172 100644 --- a/MagickCore/accelerate.c +++ b/MagickCore/accelerate.c @@ -4571,8 +4571,8 @@ static Image* ComputeRotationalBlurImage(const Image *image,MagickCLEnv clEnv, if (filteredImageBuffer == (cl_mem) NULL) goto cleanup; - blurCenter.s[0]=(float) (image->columns-1)/2.0; - blurCenter.s[1]=(float) (image->rows-1)/2.0; + blurCenter.x=(float) (image->columns-1)/2.0; + blurCenter.y=(float) (image->rows-1)/2.0; blurRadius=hypot(blurCenter.x,blurCenter.y); cossin_theta_size=(unsigned int) fabs(4.0*DegreesToRadians(angle)*sqrt( (double) blurRadius)+2UL); diff --git a/MagickCore/annotate.c b/MagickCore/annotate.c index a53173924..5e92ae27e 100644 --- a/MagickCore/annotate.c +++ b/MagickCore/annotate.c @@ -613,7 +613,6 @@ MagickExport ssize_t FormatMagickCaption(Image *image,DrawInfo *draw_info, n; digit=MagickFalse; - width=0; q=draw_info->text; s=(char *) NULL; for (p=(*caption); GetUTFCode(p) != 0; p+=GetUTFOctets(p)) @@ -659,61 +658,6 @@ MagickExport ssize_t FormatMagickCaption(Image *image,DrawInfo *draw_info, q=draw_info->text; s=(char *) NULL; } - if (width > image->columns) - { - char - *text; - - /* - No convenient break point, force one. - */ - text=AcquireString(draw_info->text); - q=draw_info->text; - s=(char *) NULL; - for (p=(*caption); GetUTFCode(p) != 0; p+=GetUTFOctets(p)) - { - if (IsUTFSpace(GetUTFCode(p)) != MagickFalse) - s=p; - if (GetUTFCode(p) == '\n') - q=draw_info->text; - for (i=0; i < (ssize_t) GetUTFOctets(p); i++) - *q++=(*(p+i)); - *q='\0'; - status=GetTypeMetrics(image,draw_info,metrics,exception); - if (status == MagickFalse) - break; - width=(size_t) floor(metrics->width+draw_info->stroke_width+0.5); - if ((width <= image->columns) || (strcmp(text,draw_info->text) == 0)) - continue; - (void) strcpy(text,draw_info->text); - if ((s != (char *) NULL) && (GetUTFOctets(s) == 1)) - { - *s='\n'; - p=s; - } - else - if ((s != (char *) NULL) || (split != MagickFalse)) - { - char - *target; - - /* - No convenient line breaks-- insert newline. - */ - target=AcquireString(*caption); - n=p-(*caption); - CopyMagickString(target,*caption,n+1); - ConcatenateMagickString(target,"\n",strlen(*caption)+1); - ConcatenateMagickString(target,p,strlen(*caption)+2); - (void) DestroyString(*caption); - *caption=target; - p=(*caption)+n; - } - q=draw_info->text; - s=(char *) NULL; - } - text=DestroyString(text); - } n=0; for (p=(*caption); GetUTFCode(p) != 0; p+=GetUTFOctets(p)) if (GetUTFCode(p) == '\n') diff --git a/MagickCore/attribute.c b/MagickCore/attribute.c index 717e7f690..f6510b7bf 100644 --- a/MagickCore/attribute.c +++ b/MagickCore/attribute.c @@ -407,7 +407,7 @@ MagickExport size_t GetImageDepth(const Image *image,ExceptionInfo *exception) continue; for (x=0; x < (ssize_t) image->columns; x++) { - if (GetPixelWriteMask(image,p) == QuantumRange) + if (GetPixelReadMask(image,p) == 0) { p+=GetPixelChannels(image); continue; @@ -464,7 +464,7 @@ MagickExport size_t GetImageDepth(const Image *image,ExceptionInfo *exception) continue; for (x=0; x < (ssize_t) image->columns; x++) { - if (GetPixelWriteMask(image,p) == QuantumRange) + if (GetPixelReadMask(image,p) == 0) { p+=GetPixelChannels(image); continue; @@ -679,7 +679,8 @@ MagickExport ImageType IdentifyImageGray(const Image *image, type=UndefinedType; break; } - if ((type == BilevelType) && (IsPixelMonochrome(image,p) == MagickFalse)) + if ((type == BilevelType) && + (IsPixelMonochrome(image,p) == MagickFalse)) type=GrayscaleType; p+=GetPixelChannels(image); } @@ -1094,7 +1095,7 @@ MagickExport MagickBooleanType SetImageDepth(Image *image, register ssize_t i; - if (GetPixelWriteMask(image,q) == QuantumRange) + if (GetPixelReadMask(image,q) == 0) { q+=GetPixelChannels(image); continue; @@ -1158,7 +1159,7 @@ MagickExport MagickBooleanType SetImageDepth(Image *image, register ssize_t i; - if (GetPixelWriteMask(image,q) == QuantumRange) + if (GetPixelReadMask(image,q) == 0) { q+=GetPixelChannels(image); continue; diff --git a/MagickCore/channel.c b/MagickCore/channel.c index dcc015511..38282e8d7 100644 --- a/MagickCore/channel.c +++ b/MagickCore/channel.c @@ -511,7 +511,7 @@ MagickExport Image *CombineImages(const Image *image, { case UndefinedColorspace: case sRGBColorspace: - { + { if (GetImageListLength(image) > 3) combine_image->alpha_trait=BlendPixelTrait; break; @@ -523,7 +523,7 @@ MagickExport Image *CombineImages(const Image *image, break; } case CMYKColorspace: - { + { if (GetImageListLength(image) > 4) combine_image->alpha_trait=BlendPixelTrait; break; @@ -754,7 +754,7 @@ MagickExport Image *SeparateImage(const Image *image, register ssize_t i; - if (GetPixelWriteMask(image,p) == QuantumRange) + if (GetPixelReadMask(image,p) == 0) { SetPixelBackgoundColor(separate_image,q); p+=GetPixelChannels(image); @@ -1005,11 +1005,11 @@ MagickExport MagickBooleanType SetImageAlphaChannel(Image *image, { double gamma; - + register ssize_t i; - - if (GetPixelWriteMask(image,q) == QuantumRange) + + if (GetPixelReadMask(image,q) == 0) { q+=GetPixelChannels(image); continue; @@ -1082,13 +1082,17 @@ MagickExport MagickBooleanType SetImageAlphaChannel(Image *image, return(status); } case CopyAlphaChannel: + case ShapeAlphaChannel: { /* Copy pixel intensity to the alpha channel. */ - image->alpha_trait=BlendPixelTrait; + image->alpha_trait=UpdatePixelTrait; status=CompositeImage(image,image,IntensityCompositeOp,MagickTrue,0,0, exception); + if (alpha_type == ShapeAlphaChannel) + (void) LevelImageColors(image,&image->background_color, + &image->background_color,MagickTrue,exception); break; } case DeactivateAlphaChannel: @@ -1132,13 +1136,13 @@ MagickExport MagickBooleanType SetImageAlphaChannel(Image *image, for (x=0; x < (ssize_t) image->columns; x++) { double - gamma, + gamma, Sa; register ssize_t i; - if (GetPixelWriteMask(image,q) == QuantumRange) + if (GetPixelReadMask(image,q) == 0) { q+=GetPixelChannels(image); continue; @@ -1247,55 +1251,6 @@ MagickExport MagickBooleanType SetImageAlphaChannel(Image *image, status=SetImageAlpha(image,OpaqueAlpha,exception); break; } - case ShapeAlphaChannel: - { - PixelInfo - background; - - /* - Shape alpha channel. - */ - image->alpha_trait=BlendPixelTrait; - status=SetImageStorageClass(image,DirectClass,exception); - if (status == MagickFalse) - break; - ConformPixelInfo(image,&image->background_color,&background,exception); - status=MagickTrue; - image_view=AcquireAuthenticCacheView(image,exception); - for (y=0; y < (ssize_t) image->rows; y++) - { - register Quantum - *magick_restrict q; - - register ssize_t - x; - - if (status == MagickFalse) - continue; - q=GetCacheViewAuthenticPixels(image_view,0,y,image->columns,1, - exception); - if (q == (Quantum *) NULL) - { - status=MagickFalse; - continue; - } - for (x=0; x < (ssize_t) image->columns; x++) - { - if (GetPixelWriteMask(image,q) == QuantumRange) - { - q+=GetPixelChannels(image); - continue; - } - if (fabs(GetPixelIntensity(image,q)) > MagickEpsilon) - SetPixelViaPixelInfo(image,&background,q); - q+=GetPixelChannels(image); - } - if (SyncCacheViewAuthenticPixels(image_view,exception) == MagickFalse) - status=MagickFalse; - } - image_view=DestroyCacheView(image_view); - break; - } case TransparentAlphaChannel: { status=SetImageAlpha(image,TransparentAlpha,exception); diff --git a/MagickCore/compare.c b/MagickCore/compare.c index adfd562ed..d3349dbde 100644 --- a/MagickCore/compare.c +++ b/MagickCore/compare.c @@ -675,7 +675,6 @@ static MagickBooleanType GetMeanErrorPerPixel(Image *image, double area, - gamma, maximum_error, mean_error; @@ -754,9 +753,8 @@ static MagickBooleanType GetMeanErrorPerPixel(Image *image, } reconstruct_view=DestroyCacheView(reconstruct_view); image_view=DestroyCacheView(image_view); - gamma=PerceptibleReciprocal(area); - image->error.mean_error_per_pixel=gamma*distortion[CompositePixelChannel]; - image->error.normalized_mean_error=gamma*QuantumScale*QuantumScale*mean_error; + image->error.mean_error_per_pixel=distortion[CompositePixelChannel]/area; + image->error.normalized_mean_error=QuantumScale*QuantumScale*mean_error/area; image->error.normalized_maximum_error=QuantumScale*maximum_error; return(status); } @@ -1648,7 +1646,6 @@ MagickExport MagickBooleanType SetImageColorMetric(Image *image, double area, - gamma, maximum_error, mean_error, mean_error_per_pixel; @@ -1729,10 +1726,10 @@ MagickExport MagickBooleanType SetImageColorMetric(Image *image, } reconstruct_view=DestroyCacheView(reconstruct_view); image_view=DestroyCacheView(image_view); - gamma=PerceptibleReciprocal(area); - image->error.mean_error_per_pixel=gamma*mean_error_per_pixel; - image->error.normalized_mean_error=gamma*QuantumScale*QuantumScale*mean_error; - image->error.normalized_maximum_error=(double) QuantumScale*maximum_error; + image->error.mean_error_per_pixel=(double) (mean_error_per_pixel/area); + image->error.normalized_mean_error=(double) (QuantumScale*QuantumScale* + mean_error/area); + image->error.normalized_maximum_error=(double) (QuantumScale*maximum_error); status=image->error.mean_error_per_pixel == 0.0 ? MagickTrue : MagickFalse; return(status); } diff --git a/MagickCore/composite.c b/MagickCore/composite.c index 64e649501..f9945b2c9 100644 --- a/MagickCore/composite.c +++ b/MagickCore/composite.c @@ -284,6 +284,234 @@ static void CompositeHCL(const MagickRealType red,const MagickRealType green, *luma=QuantumScale*(0.298839*r+0.586811*g+0.114350*b); } +static MagickBooleanType CompositeOverImage(Image *image, + const Image *source_image,const MagickBooleanType clip_to_self, + const ssize_t x_offset,const ssize_t y_offset,ExceptionInfo *exception) +{ +#define CompositeImageTag "Composite/Image" + + CacheView + *image_view, + *source_view; + + const char + *value; + + MagickBooleanType + clamp, + status; + + MagickOffsetType + progress; + + ssize_t + y; + + /* + Composite image. + */ + status=MagickTrue; + progress=0; + clamp=MagickTrue; + value=GetImageArtifact(image,"compose:clamp"); + if (value != (const char *) NULL) + clamp=IsStringTrue(value); + source_view=AcquireVirtualCacheView(source_image,exception); + image_view=AcquireAuthenticCacheView(image,exception); +#if defined(MAGICKCORE_OPENMP_SUPPORT) + #pragma omp parallel for schedule(static,4) shared(progress,status) \ + magick_threads(source_image,image,image->rows,1) +#endif + for (y=0; y < (ssize_t) image->rows; y++) + { + const Quantum + *pixels; + + register const Quantum + *magick_restrict p; + + register Quantum + *magick_restrict q; + + register ssize_t + x; + + size_t + channels; + + if (status == MagickFalse) + continue; + if (clip_to_self != MagickFalse) + { + if (y < y_offset) + continue; + if ((y-y_offset) >= (ssize_t) source_image->rows) + continue; + } + /* + If pixels is NULL, y is outside overlay region. + */ + pixels=(Quantum *) NULL; + p=(Quantum *) NULL; + if ((y >= y_offset) && ((y-y_offset) < (ssize_t) source_image->rows)) + { + p=GetCacheViewVirtualPixels(source_view,0,y-y_offset, + source_image->columns,1,exception); + if (p == (const Quantum *) NULL) + { + status=MagickFalse; + continue; + } + pixels=p; + if (x_offset < 0) + p-=x_offset*GetPixelChannels(source_image); + } + q=GetCacheViewAuthenticPixels(image_view,0,y,image->columns,1,exception); + if (q == (Quantum *) NULL) + { + status=MagickFalse; + continue; + } + for (x=0; x < (ssize_t) image->columns; x++) + { + MagickRealType + Da, + Dc, + Dca, + gamma, + Sa, + Sc, + Sca; + + register ssize_t + i; + + if (clip_to_self != MagickFalse) + { + if (x < x_offset) + { + q+=GetPixelChannels(image); + continue; + } + if ((x-x_offset) >= (ssize_t) source_image->columns) + break; + } + if ((pixels == (Quantum *) NULL) || (x < x_offset) || + ((x-x_offset) >= (ssize_t) source_image->columns)) + { + Quantum + source[MaxPixelChannels]; + + /* + Virtual composite: + Sc: source color. + Dc: canvas color. + */ + if (GetPixelReadMask(image,q) == 0) + { + q+=GetPixelChannels(image); + continue; + } + (void) GetOneVirtualPixel(source_image,x-x_offset,y-y_offset, + source,exception); + for (i=0; i < (ssize_t) GetPixelChannels(image); i++) + { + PixelChannel channel=GetPixelChannelChannel(image,i); + PixelTrait traits=GetPixelChannelTraits(image,channel); + PixelTrait source_traits=GetPixelChannelTraits(source_image, + channel); + if ((traits == UndefinedPixelTrait) || + (source_traits == UndefinedPixelTrait)) + continue; + q[i]=source[channel]; + } + q+=GetPixelChannels(image); + continue; + } + /* + Authentic composite: + Sa: normalized source alpha. + Da: normalized canvas alpha. + */ + if (GetPixelReadMask(source_image,p) == 0) + { + p+=GetPixelChannels(source_image); + channels=GetPixelChannels(source_image); + if (p >= (pixels+channels*source_image->columns)) + p=pixels; + q+=GetPixelChannels(image); + continue; + } + Sa=QuantumScale*GetPixelAlpha(source_image,p); + Da=QuantumScale*GetPixelAlpha(image,q); + gamma=Sa+Da-Sa*Da; + gamma=PerceptibleReciprocal(gamma); + for (i=0; i < (ssize_t) GetPixelChannels(image); i++) + { + PixelChannel channel=GetPixelChannelChannel(image,i); + PixelTrait traits=GetPixelChannelTraits(image,channel); + PixelTrait source_traits=GetPixelChannelTraits(source_image, + channel); + if ((traits == UndefinedPixelTrait) || + (source_traits == UndefinedPixelTrait)) + continue; + if ((traits & CopyPixelTrait) != 0) + { + /* + Copy channel. + */ + q[i]=GetPixelChannel(source_image,channel,p); + continue; + } + if (channel == AlphaPixelChannel) + { + /* + Set alpha channel. + */ + q[i]=clamp != MagickFalse ? + ClampPixel(QuantumRange*(Sa+Da-Sa*Da)) : + ClampToQuantum(QuantumRange*(Sa+Da-Sa*Da)); + continue; + } + /* + Sc: source color. + Dc: canvas color. + */ + Sc=(MagickRealType) GetPixelChannel(source_image,channel,p); + Dc=(MagickRealType) q[i]; + Sca=QuantumScale*Sa*Sc; + Dca=QuantumScale*Da*Dc; + q[i]=clamp != MagickFalse ? + ClampPixel(gamma*QuantumRange*(Sca+Dca*(1.0-Sa))) : + ClampToQuantum(gamma*QuantumRange*(Sca+Dca*(1.0-Sa))); + } + p+=GetPixelChannels(source_image); + channels=GetPixelChannels(source_image); + if (p >= (pixels+channels*source_image->columns)) + p=pixels; + q+=GetPixelChannels(image); + } + if (SyncCacheViewAuthenticPixels(image_view,exception) == MagickFalse) + status=MagickFalse; + if (image->progress_monitor != (MagickProgressMonitor) NULL) + { + MagickBooleanType + proceed; + +#if defined(MAGICKCORE_OPENMP_SUPPORT) + #pragma omp critical (MagickCore_CompositeImage) +#endif + proceed=SetImageProgress(image,CompositeImageTag,progress++, + image->rows); + if (proceed == MagickFalse) + status=MagickFalse; + } + } + source_view=DestroyCacheView(source_view); + image_view=DestroyCacheView(image_view); + return(status); +} + MagickExport MagickBooleanType CompositeImage(Image *image, const Image *composite,const CompositeOperator compose, const MagickBooleanType clip_to_self,const ssize_t x_offset, @@ -341,6 +569,13 @@ MagickExport MagickBooleanType CompositeImage(Image *image, if (IsGrayColorspace(image->colorspace) != MagickFalse) (void) SetImageColorspace(image,sRGBColorspace,exception); (void) SetImageColorspace(source_image,image->colorspace,exception); + if ((compose == OverCompositeOp) || (compose == SrcOverCompositeOp)) + { + status=CompositeOverImage(image,source_image,clip_to_self,x_offset, + y_offset,exception); + source_image=DestroyImage(source_image); + return(status); + } amount=0.5; canvas_image=(Image *) NULL; canvas_dissolve=1.0; @@ -400,7 +635,7 @@ MagickExport MagickBooleanType CompositeImage(Image *image, register ssize_t i; - if (GetPixelWriteMask(source_image,p) == QuantumRange) + if (GetPixelReadMask(source_image,p) == 0) { p+=GetPixelChannels(source_image); q+=GetPixelChannels(image); @@ -486,7 +721,7 @@ MagickExport MagickBooleanType CompositeImage(Image *image, } for (x=0; x < (ssize_t) source_image->columns; x++) { - if (GetPixelWriteMask(source_image,p) == QuantumRange) + if (GetPixelReadMask(source_image,p) == 0) { p+=GetPixelChannels(source_image); q+=GetPixelChannels(image); @@ -1082,7 +1317,7 @@ MagickExport MagickBooleanType CompositeImage(Image *image, */ (void) GetOneVirtualPixel(source_image,x-x_offset,y-y_offset,source, exception); - if (GetPixelWriteMask(image,q) == QuantumRange) + if (GetPixelReadMask(image,q) == 0) { q+=GetPixelChannels(image); continue; @@ -1241,7 +1476,7 @@ MagickExport MagickBooleanType CompositeImage(Image *image, break; } } - if (GetPixelWriteMask(image,q) == QuantumRange) + if (GetPixelReadMask(image,q) == 0) { p+=GetPixelChannels(source_image); q+=GetPixelChannels(image); @@ -2244,7 +2479,7 @@ MagickExport MagickBooleanType TextureImage(Image *image,const Image *texture, register ssize_t i; - if (GetPixelWriteMask(image,q) == QuantumRange) + if (GetPixelReadMask(image,q) == 0) { p+=GetPixelChannels(texture_image); q+=GetPixelChannels(image); diff --git a/MagickCore/decorate.c b/MagickCore/decorate.c index 30b4d8406..a0ccca876 100644 --- a/MagickCore/decorate.c +++ b/MagickCore/decorate.c @@ -441,7 +441,7 @@ MagickExport Image *FrameImage(const Image *image,const FrameInfo *frame_info, register ssize_t i; - if (GetPixelWriteMask(image,q) == QuantumRange) + if (GetPixelReadMask(image,q) == 0) { SetPixelBackgoundColor(frame_image,q); p+=GetPixelChannels(image); @@ -714,7 +714,7 @@ MagickExport MagickBooleanType RaiseImage(Image *image, } for (x=0; x < y; x++) { - if (GetPixelWriteMask(image,q) == QuantumRange) + if (GetPixelReadMask(image,q) == 0) { q+=GetPixelChannels(image); continue; @@ -732,7 +732,7 @@ MagickExport MagickBooleanType RaiseImage(Image *image, } for ( ; x < (ssize_t) (image->columns-y); x++) { - if (GetPixelWriteMask(image,q) == QuantumRange) + if (GetPixelReadMask(image,q) == 0) { q+=GetPixelChannels(image); continue; @@ -750,7 +750,7 @@ MagickExport MagickBooleanType RaiseImage(Image *image, } for ( ; x < (ssize_t) image->columns; x++) { - if (GetPixelWriteMask(image,q) == QuantumRange) + if (GetPixelReadMask(image,q) == 0) { q+=GetPixelChannels(image); continue; @@ -804,7 +804,7 @@ MagickExport MagickBooleanType RaiseImage(Image *image, } for (x=0; x < (ssize_t) raise_info->width; x++) { - if (GetPixelWriteMask(image,q) == QuantumRange) + if (GetPixelReadMask(image,q) == 0) { q+=GetPixelChannels(image); continue; @@ -824,7 +824,7 @@ MagickExport MagickBooleanType RaiseImage(Image *image, q+=GetPixelChannels(image); for ( ; x < (ssize_t) image->columns; x++) { - if (GetPixelWriteMask(image,q) == QuantumRange) + if (GetPixelReadMask(image,q) == 0) { q+=GetPixelChannels(image); continue; @@ -878,7 +878,7 @@ MagickExport MagickBooleanType RaiseImage(Image *image, } for (x=0; x < (ssize_t) (image->rows-y); x++) { - if (GetPixelWriteMask(image,q) == QuantumRange) + if (GetPixelReadMask(image,q) == 0) { q+=GetPixelChannels(image); continue; @@ -909,7 +909,7 @@ MagickExport MagickBooleanType RaiseImage(Image *image, } for ( ; x < (ssize_t) image->columns; x++) { - if (GetPixelWriteMask(image,q) == QuantumRange) + if (GetPixelReadMask(image,q) == 0) { q+=GetPixelChannels(image); continue; diff --git a/MagickCore/draw.c b/MagickCore/draw.c index 4e4ebb1cd..f12760db5 100644 --- a/MagickCore/draw.c +++ b/MagickCore/draw.c @@ -1421,7 +1421,7 @@ MagickExport MagickBooleanType DrawClipPath(Image *image, clip_mask=CloneImage(image,image->columns,image->rows,MagickTrue,exception); if (clip_mask == (Image *) NULL) return(MagickFalse); - (void) QueryColorCompliance("#ffffff",AllCompliance, + (void) QueryColorCompliance("#0000",AllCompliance, &clip_mask->background_color,exception); clip_mask->background_color.alpha=(MagickRealType) TransparentAlpha; (void) SetImageBackgroundColor(clip_mask,exception); @@ -1430,13 +1430,13 @@ MagickExport MagickBooleanType DrawClipPath(Image *image, draw_info->clip_mask); clone_info=CloneDrawInfo((ImageInfo *) NULL,draw_info); (void) CloneString(&clone_info->primitive,value); - (void) QueryColorCompliance("#000000",AllCompliance,&clone_info->fill, + (void) QueryColorCompliance("#ffffff",AllCompliance,&clone_info->fill, exception); - if (clone_info->clip_mask != (char *) NULL) - clone_info->clip_mask=DestroyString(clone_info->clip_mask); - status=DrawImage(clip_mask,clone_info,exception); + clone_info->clip_mask=(char *) NULL; + status=NegateImage(clip_mask,MagickFalse,exception); (void) SetImageMask(image,ReadPixelMask,clip_mask,exception); clip_mask=DestroyImage(clip_mask); + status&=DrawImage(image,clone_info,exception); clone_info=DestroyDrawInfo(clone_info); if (image->debug != MagickFalse) (void) LogMagickEvent(DrawEvent,GetMagickModule(),"end clip-path"); @@ -4957,7 +4957,6 @@ MagickExport void GetDrawInfo(const ImageInfo *image_info,DrawInfo *draw_info) draw_info->fill_rule=EvenOddRule; draw_info->fill_alpha=OpaqueAlpha; draw_info->stroke_alpha=OpaqueAlpha; - draw_info->alpha=OpaqueAlpha; draw_info->linecap=ButtCap; draw_info->linejoin=MiterJoin; draw_info->miterlimit=10; diff --git a/MagickCore/effect.c b/MagickCore/effect.c index f182e6d96..5a33212fb 100644 --- a/MagickCore/effect.c +++ b/MagickCore/effect.c @@ -336,7 +336,7 @@ MagickExport Image *AdaptiveBlurImage(const Image *image,const double radius, (blur_traits == UndefinedPixelTrait)) continue; if (((blur_traits & CopyPixelTrait) != 0) || - (GetPixelWriteMask(image,p+center) == QuantumRange)) + (GetPixelReadMask(image,p+center) == 0)) { SetPixelChannel(blur_image,channel,p[center+i],q); continue; @@ -657,7 +657,7 @@ MagickExport Image *AdaptiveSharpenImage(const Image *image,const double radius, (sharp_traits == UndefinedPixelTrait)) continue; if (((sharp_traits & CopyPixelTrait) != 0) || - (GetPixelWriteMask(image,p+center) == QuantumRange)) + (GetPixelReadMask(image,p+center) == 0)) { SetPixelChannel(sharp_image,channel,p[center+i],q); continue; @@ -2136,7 +2136,7 @@ MagickExport Image *MotionBlurImage(const Image *image,const double radius, (blur_traits == UndefinedPixelTrait)) continue; if (((blur_traits & CopyPixelTrait) != 0) || - (GetPixelWriteMask(image,p) == QuantumRange)) + (GetPixelReadMask(image,p) == 0)) { SetPixelChannel(blur_image,channel,p[i],q); continue; @@ -2935,7 +2935,7 @@ MagickExport Image *RotationalBlurImage(const Image *image,const double angle, (blur_traits == UndefinedPixelTrait)) continue; if (((blur_traits & CopyPixelTrait) != 0) || - (GetPixelWriteMask(image,p) == QuantumRange)) + (GetPixelReadMask(image,p) == 0)) { SetPixelChannel(blur_image,channel,p[i],q); continue; @@ -3249,7 +3249,7 @@ MagickExport Image *SelectiveBlurImage(const Image *image,const double radius, (blur_traits == UndefinedPixelTrait)) continue; if (((blur_traits & CopyPixelTrait) != 0) || - (GetPixelWriteMask(image,p+center) == QuantumRange)) + (GetPixelReadMask(image,p+center) == 0)) { SetPixelChannel(blur_image,channel,p[center+i],q); continue; @@ -3541,7 +3541,7 @@ MagickExport Image *ShadeImage(const Image *image,const MagickBooleanType gray, (shade_traits == UndefinedPixelTrait)) continue; if (((shade_traits & CopyPixelTrait) != 0) || - (GetPixelWriteMask(linear_image,center) == QuantumRange)) + (GetPixelReadMask(linear_image,center) == 0)) { SetPixelChannel(shade_image,channel,center[i],q); continue; @@ -3982,7 +3982,7 @@ MagickExport Image *UnsharpMaskImage(const Image *image,const double radius, (unsharp_traits == UndefinedPixelTrait)) continue; if (((unsharp_traits & CopyPixelTrait) != 0) || - (GetPixelWriteMask(image,p) == QuantumRange)) + (GetPixelReadMask(image,p) == 0)) { SetPixelChannel(unsharp_image,channel,p[i],q); continue; diff --git a/MagickCore/enhance.c b/MagickCore/enhance.c index 16b35151c..315cb24e4 100644 --- a/MagickCore/enhance.c +++ b/MagickCore/enhance.c @@ -379,7 +379,7 @@ MagickExport MagickBooleanType ClutImage(Image *image,const Image *clut_image, PixelTrait traits; - if (GetPixelWriteMask(image,q) == QuantumRange) + if (GetPixelReadMask(image,q) == 0) { q+=GetPixelChannels(image); continue; @@ -1233,7 +1233,7 @@ MagickExport MagickBooleanType ContrastStretchImage(Image *image, register ssize_t j; - if (GetPixelWriteMask(image,q) == QuantumRange) + if (GetPixelReadMask(image,q) == 0) { q+=GetPixelChannels(image); continue; @@ -1415,7 +1415,7 @@ MagickExport Image *EnhanceImage(const Image *image,ExceptionInfo *exception) register const Quantum *magick_restrict r; - if (GetPixelWriteMask(image,p) == QuantumRange) + if (GetPixelReadMask(image,p) == 0) { SetPixelBackgoundColor(enhance_image,q); p+=GetPixelChannels(image); @@ -1703,7 +1703,7 @@ MagickExport MagickBooleanType EqualizeImage(Image *image, register ssize_t j; - if (GetPixelWriteMask(image,q) == QuantumRange) + if (GetPixelReadMask(image,q) == 0) { q+=GetPixelChannels(image); continue; @@ -1885,7 +1885,7 @@ MagickExport MagickBooleanType GammaImage(Image *image,const double gamma, register ssize_t j; - if (GetPixelWriteMask(image,q) == QuantumRange) + if (GetPixelReadMask(image,q) == 0) { q+=GetPixelChannels(image); continue; @@ -2024,7 +2024,7 @@ MagickExport MagickBooleanType GrayscaleImage(Image *image, red, intensity; - if (GetPixelWriteMask(image,q) == QuantumRange) + if (GetPixelReadMask(image,q) == 0) { q+=GetPixelChannels(image); continue; @@ -2458,7 +2458,7 @@ MagickExport MagickBooleanType LevelImage(Image *image,const double black_point, register ssize_t j; - if (GetPixelWriteMask(image,q) == QuantumRange) + if (GetPixelReadMask(image,q) == 0) { q+=GetPixelChannels(image); continue; @@ -2614,7 +2614,7 @@ MagickExport MagickBooleanType LevelizeImage(Image *image, register ssize_t j; - if (GetPixelWriteMask(image,q) == QuantumRange) + if (GetPixelReadMask(image,q) == 0) { q+=GetPixelChannels(image); continue; @@ -2707,8 +2707,8 @@ MagickExport MagickBooleanType LevelImageColors(Image *image, if (image->debug != MagickFalse) (void) LogMagickEvent(TraceEvent,GetMagickModule(),"%s",image->filename); if ((IsGrayColorspace(image->colorspace) != MagickFalse) && - ((IsGrayColorspace(black_color->colorspace) != MagickFalse) || - (IsGrayColorspace(white_color->colorspace) != MagickFalse))) + ((IsGrayColorspace(black_color->colorspace) == MagickFalse) || + (IsGrayColorspace(white_color->colorspace) == MagickFalse))) (void) SetImageColorspace(image,sRGBColorspace,exception); status=MagickTrue; if (invert == MagickFalse) @@ -3317,11 +3317,6 @@ MagickExport MagickBooleanType ModulateImage(Image *image,const char *modulate, green, red; - if (GetPixelWriteMask(image,q) == QuantumRange) - { - q+=GetPixelChannels(image); - continue; - } red=(double) GetPixelRed(image,q); green=(double) GetPixelGreen(image,q); blue=(double) GetPixelBlue(image,q); @@ -3504,7 +3499,7 @@ MagickExport MagickBooleanType NegateImage(Image *image, register ssize_t j; - if ((GetPixelWriteMask(image,q) == QuantumRange) || + if ((GetPixelReadMask(image,q) == 0) || IsPixelGray(image,q) != MagickFalse) { q+=GetPixelChannels(image); @@ -3568,7 +3563,7 @@ MagickExport MagickBooleanType NegateImage(Image *image, register ssize_t j; - if (GetPixelWriteMask(image,q) == QuantumRange) + if (GetPixelReadMask(image,q) == 0) { q+=GetPixelChannels(image); continue; @@ -3872,7 +3867,7 @@ MagickExport MagickBooleanType SigmoidalContrastImage(Image *image, register ssize_t i; - if (GetPixelWriteMask(image,q) == QuantumRange) + if (GetPixelReadMask(image,q) == 0) { q+=GetPixelChannels(image); continue; diff --git a/MagickCore/fx.c b/MagickCore/fx.c index b06d3cd38..09d7a2a7a 100644 --- a/MagickCore/fx.c +++ b/MagickCore/fx.c @@ -372,7 +372,7 @@ MagickExport Image *AddNoiseImage(const Image *image,const NoiseType noise_type, (noise_traits == UndefinedPixelTrait)) continue; if (((noise_traits & CopyPixelTrait) != 0) || - (GetPixelWriteMask(image,p) == QuantumRange)) + (GetPixelReadMask(image,p) == 0)) { SetPixelChannel(noise_image,channel,p[i],q); continue; @@ -780,7 +780,7 @@ MagickExport Image *ColorizeImage(const Image *image,const char *blend, if (traits == UndefinedPixelTrait) continue; if (((traits & CopyPixelTrait) != 0) || - (GetPixelWriteMask(colorize_image,q) == QuantumRange)) + (GetPixelReadMask(colorize_image,q) == 0)) continue; SetPixelChannel(colorize_image,(PixelChannel) i,ClampToQuantum( Colorize(q[i],GetPixelInfoChannel(&blend_percentage,(PixelChannel) i), @@ -3170,7 +3170,7 @@ MagickExport Image *FxImage(const Image *image,const char *expression, (fx_traits == UndefinedPixelTrait)) continue; if (((fx_traits & CopyPixelTrait) != 0) || - (GetPixelWriteMask(image,p) == QuantumRange)) + (GetPixelReadMask(image,p) == 0)) { SetPixelChannel(fx_image,channel,p[i],q); continue; @@ -3356,7 +3356,7 @@ MagickExport Image *ImplodeImage(const Image *image,const double amount, /* Determine if the pixel is within an ellipse. */ - if (GetPixelWriteMask(image,p) == QuantumRange) + if (GetPixelReadMask(image,p) == 0) { SetPixelBackgoundColor(implode_image,q); p+=GetPixelChannels(image); @@ -3600,7 +3600,7 @@ MagickExport Image *MorphImages(const Image *image,const size_t number_frames, (morph_traits == UndefinedPixelTrait)) continue; if (((morph_traits & CopyPixelTrait) != 0) || - (GetPixelWriteMask(morph_images,p) == QuantumRange)) + (GetPixelReadMask(morph_images,p) == 0)) { SetPixelChannel(morph_image,channel,p[i],q); continue; @@ -4547,7 +4547,7 @@ MagickExport Image *SketchImage(const Image *image,const double radius, register ssize_t i; - if (GetPixelWriteMask(random_image,q) == QuantumRange) + if (GetPixelReadMask(random_image,q) == 0) { q+=GetPixelChannels(random_image); continue; @@ -4711,7 +4711,7 @@ MagickExport MagickBooleanType SolarizeImage(Image *image, register ssize_t i; - if (GetPixelWriteMask(image,q) == QuantumRange) + if (GetPixelReadMask(image,q) == 0) { q+=GetPixelChannels(image); continue; @@ -5201,7 +5201,7 @@ MagickExport Image *SwirlImage(const Image *image,double degrees, /* Determine if the pixel is within an ellipse. */ - if (GetPixelWriteMask(image,p) == QuantumRange) + if (GetPixelReadMask(image,p) == 0) { SetPixelBackgoundColor(swirl_image,q); p+=GetPixelChannels(image); @@ -5437,7 +5437,7 @@ MagickExport Image *TintImage(const Image *image,const char *blend, (tint_traits == UndefinedPixelTrait)) continue; if (((tint_traits & CopyPixelTrait) != 0) || - (GetPixelWriteMask(image,p) == QuantumRange)) + (GetPixelReadMask(image,p) == 0)) { SetPixelChannel(tint_image,channel,p[i],q); continue; @@ -5866,7 +5866,7 @@ MagickExport Image *WaveletDenoiseImage(const Image *image, ThrowImageException(ResourceLimitError,"MemoryAllocationFailed"); pixels_info=AcquireVirtualMemory(3*image->columns,image->rows* sizeof(*pixels)); - kernel=(float *) AcquireQuantumMemory(MagickMax(image->rows,image->columns)+1, + kernel=(float *) AcquireQuantumMemory(MagickMax(image->rows,image->columns), GetOpenMPMaximumThreads()*sizeof(*kernel)); if ((pixels_info == (MemoryInfo *) NULL) || (kernel == (float *) NULL)) { diff --git a/MagickCore/image.c b/MagickCore/image.c index 89905349e..43c406486 100644 --- a/MagickCore/image.c +++ b/MagickCore/image.c @@ -576,7 +576,7 @@ MagickExport Image *AppendImages(const Image *images, GetPixelInfo(next,&pixel); for (x=0; x < (ssize_t) next->columns; x++) { - if (GetPixelWriteMask(next,p) == QuantumRange) + if (GetPixelReadMask(next,p) == 0) { SetPixelBackgoundColor(append_image,q); p+=GetPixelChannels(next); @@ -1818,7 +1818,7 @@ MagickExport MagickBooleanType IsHighDynamicRangeImage(const Image *image, register ssize_t i; - if (GetPixelWriteMask(image,p) == QuantumRange) + if (GetPixelReadMask(image,p) == 0) { p+=GetPixelChannels(image); continue; @@ -2970,7 +2970,7 @@ MagickExport MagickBooleanType SetImageAlpha(Image *image,const Quantum alpha, } for (x=0; x < (ssize_t) image->columns; x++) { - if (GetPixelWriteMask(image,q) != QuantumRange) + if (GetPixelReadMask(image,q) != 0) SetPixelAlpha(image,alpha,q); q+=GetPixelChannels(image); } @@ -3084,12 +3084,12 @@ MagickExport MagickBooleanType SetImageMask(Image *image,const PixelMask type, { case WritePixelMask: { - SetPixelWriteMask(image,ClampToQuantum(intensity),q); + SetPixelWriteMask(image,ClampToQuantum(QuantumRange-intensity),q); break; } default: { - SetPixelReadMask(image,ClampToQuantum(intensity),q); + SetPixelReadMask(image,ClampToQuantum(QuantumRange-intensity),q); break; } } diff --git a/MagickCore/morphology.c b/MagickCore/morphology.c index 67cb64b95..f53f00a50 100644 --- a/MagickCore/morphology.c +++ b/MagickCore/morphology.c @@ -156,8 +156,8 @@ static inline KernelInfo *LastKernelInfo(KernelInfo *kernel) % shape. However at least one non-nan value must be provided for correct % working of a kernel. % -% The returned kernel should be freed using the DestroyKernelInfo method when -% you are finished with it. Do not free this memory yourself. +% The returned kernel should be freed using the DestroyKernelInfo() when you +% are finished with it. Do not free this memory yourself. % % Input kernel defintion strings can consist of any of three types. % @@ -551,7 +551,7 @@ MagickExport KernelInfo *AcquireKernelInfo(const char *kernel_string, % % % % % % -+ A c q u i r e K e r n e l B u i l t I n % +% A c q u i r e K e r n e l B u i l t I n % % % % % % % @@ -2712,7 +2712,7 @@ static ssize_t MorphologyPrimitive(const Image *image,Image *morphology_image, (morphology_traits == UndefinedPixelTrait)) continue; if (((traits & CopyPixelTrait) != 0) || - (GetPixelWriteMask(image,p+center) == QuantumRange)) + (GetPixelReadMask(image,p+center) == 0)) { SetPixelChannel(morphology_image,channel,p[center+i],q); continue; @@ -2863,7 +2863,7 @@ static ssize_t MorphologyPrimitive(const Image *image,Image *morphology_image, (morphology_traits == UndefinedPixelTrait)) continue; if (((traits & CopyPixelTrait) != 0) || - (GetPixelWriteMask(image,p+center) == QuantumRange)) + (GetPixelReadMask(image,p+center) == 0)) { SetPixelChannel(morphology_image,channel,p[center+i],q); continue; @@ -3344,7 +3344,7 @@ static ssize_t MorphologyPrimitiveDirect(Image *image, if (traits == UndefinedPixelTrait) continue; if (((traits & CopyPixelTrait) != 0) || - (GetPixelWriteMask(image,p+center) == QuantumRange)) + (GetPixelReadMask(image,p+center) == 0)) continue; pixels=p; pixel=(double) QuantumRange; @@ -3505,7 +3505,7 @@ static ssize_t MorphologyPrimitiveDirect(Image *image, if (traits == UndefinedPixelTrait) continue; if (((traits & CopyPixelTrait) != 0) || - (GetPixelWriteMask(image,p+center) == QuantumRange)) + (GetPixelReadMask(image,p+center) == 0)) continue; pixels=p; pixel=(double) QuantumRange; diff --git a/MagickCore/nt-base.c b/MagickCore/nt-base.c index 17652b7ef..160897622 100644 --- a/MagickCore/nt-base.c +++ b/MagickCore/nt-base.c @@ -626,7 +626,7 @@ MagickPrivate double NTElapsedTime(void) SystemTimeToFileTime(&system_time,&elapsed_time.filetime); return((double) 1.0e-7*elapsed_time.filetime64); } - + /* %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % % @@ -679,6 +679,7 @@ MagickPrivate double NTErf(double x) return(sign*y); } + /* %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % % @@ -1749,7 +1750,6 @@ MagickPrivate DIR *NTOpenDirectory(const char *path) length; wchar_t - directory_separator[MagickPathExtent], file_specification[MagickPathExtent]; assert(path != (const char *) NULL); @@ -1757,11 +1757,8 @@ MagickPrivate DIR *NTOpenDirectory(const char *path) MagickPathExtent); if (length == 0) return((DIR *) NULL); - length=MultiByteToWideChar(CP_UTF8,0,DirectorySeparator,-1, - directory_separator,strlen(DirectorySeparator)+1); - if (length == 0) - return((DIR *) NULL); - if (wcsncat(file_specification,directory_separator,MagickPathExtent-wcslen(file_specification)-1) == (wchar_t*) NULL) + if(wcsncat(file_specification,(const wchar_t*) DirectorySeparator, + MagickPathExtent-wcslen(file_specification)-1) == (wchar_t*) NULL) return((DIR *) NULL); entry=(DIR *) AcquireMagickMemory(sizeof(DIR)); if (entry != (DIR *) NULL) diff --git a/MagickCore/opencl.c b/MagickCore/opencl.c index 0cf2002f5..da23984ef 100644 --- a/MagickCore/opencl.c +++ b/MagickCore/opencl.c @@ -1235,71 +1235,25 @@ static void CacheOpenCLKernel(MagickCLDevice device,char *filename, ExceptionInfo *exception) { cl_uint - num_devices, status; size_t - i, - size, - *program_sizes; + binaryProgramSize; + + unsigned char + *binaryProgram; status=openCL_library->clGetProgramInfo(device->program, - CL_PROGRAM_NUM_DEVICES,sizeof(cl_uint),&num_devices,NULL); + CL_PROGRAM_BINARY_SIZES,sizeof(size_t),&binaryProgramSize,NULL); if (status != CL_SUCCESS) return; - size=num_devices*sizeof(*program_sizes); - program_sizes=(size_t*) AcquireMagickMemory(size); - if (program_sizes == (size_t*) NULL) - return; + + binaryProgram=(unsigned char*) AcquireMagickMemory(binaryProgramSize); status=openCL_library->clGetProgramInfo(device->program, - CL_PROGRAM_BINARY_SIZES,size,program_sizes,NULL); + CL_PROGRAM_BINARIES,sizeof(unsigned char*),&binaryProgram,NULL); if (status == CL_SUCCESS) - { - size_t - binary_program_size; - - unsigned char - **binary_program; - - binary_program_size=num_devices*sizeof(*binary_program); - binary_program=(unsigned char **) AcquireMagickMemory( - binary_program_size); - for (i = 0; i < num_devices; i++) - binary_program[i]=AcquireQuantumMemory(MagickMax(*(program_sizes+i),1), - sizeof(**binary_program)); - status=openCL_library->clGetProgramInfo(device->program, - CL_PROGRAM_BINARIES,binary_program_size,binary_program,NULL); - if (status == CL_SUCCESS) - { - for (i = 0; i < num_devices; i++) - { - int - file; - - size_t - program_size; - - program_size=*(program_sizes+i); - if (program_size < 1) - continue; - file=open_utf8(filename,O_WRONLY | O_CREAT | O_BINARY,S_MODE); - if (file != -1) - { - write(file,binary_program[i],program_size); - file=close(file); - } - else - (void) ThrowMagickException(exception,GetMagickModule(), - DelegateWarning,"Saving kernel failed.","`%s'",filename); - break; - } - } - for (i = 0; i < num_devices; i++) - binary_program[i]=(unsigned char *) RelinquishMagickMemory( - binary_program[i]); - binary_program=(unsigned char **) RelinquishMagickMemory(binary_program); - } - program_sizes=(size_t *) RelinquishMagickMemory(program_sizes); + (void) BlobToFile(filename,binaryProgram,binaryProgramSize,exception); + binaryProgram=(unsigned char *) RelinquishMagickMemory(binaryProgram); } static MagickBooleanType LoadCachedOpenCLKernel(MagickCLDevice device, diff --git a/MagickCore/option.c b/MagickCore/option.c index a4fe6273b..3910fee3e 100644 --- a/MagickCore/option.c +++ b/MagickCore/option.c @@ -675,8 +675,8 @@ static const OptionInfo { "+render", 0L, DrawInfoOptionFlag, MagickFalse }, { "+resample", 1L, DeprecateOptionFlag, MagickTrue }, { "-resample", 1L, SimpleOperatorFlag, MagickFalse }, - { "-respect-parentheses", 0L, ImageInfoOptionFlag, MagickFalse }, - { "+respect-parentheses", 0L, ImageInfoOptionFlag, MagickFalse }, + { "-respect-parenthesis", 0L, ImageInfoOptionFlag, MagickFalse }, + { "+respect-parenthesis", 0L, ImageInfoOptionFlag, MagickFalse }, { "+reverse", 0L, DeprecateOptionFlag | FireOptionFlag, MagickTrue }, { "-reverse", 0L, ListOperatorFlag | FireOptionFlag, MagickFalse }, { "+roll", 1L, DeprecateOptionFlag, MagickTrue }, diff --git a/MagickCore/paint.c b/MagickCore/paint.c index fe62bb80f..1a1125a37 100644 --- a/MagickCore/paint.c +++ b/MagickCore/paint.c @@ -830,7 +830,7 @@ MagickExport Image *OilPaintImage(const Image *image,const double radius, (paint_traits == UndefinedPixelTrait)) continue; if (((paint_traits & CopyPixelTrait) != 0) || - (GetPixelWriteMask(linear_image,p) == QuantumRange)) + (GetPixelReadMask(linear_image,p) == 0)) { SetPixelChannel(paint_image,channel,p[center+i],q); continue; @@ -971,11 +971,6 @@ MagickExport MagickBooleanType OpaquePaintImage(Image *image, pixel=zero; for (x=0; x < (ssize_t) image->columns; x++) { - if (GetPixelWriteMask(image,q) == QuantumRange) - { - q+=GetPixelChannels(image); - continue; - } GetPixelInfoPixel(image,q,&pixel); if (IsFuzzyEquivalencePixelInfo(&pixel,&conform_target) != invert) SetPixelViaPixelInfo(image,&conform_fill,q); diff --git a/MagickCore/property.c b/MagickCore/property.c index 1a32393b3..2a80dc2a9 100644 --- a/MagickCore/property.c +++ b/MagickCore/property.c @@ -213,7 +213,7 @@ MagickExport MagickBooleanType CloneImageProperties(Image *image, % % DefineImageProperty() associates an assignment string of the form % "key=value" with an artifact or options. It is equivelent to -% SetImageProperty(). +% SetImageProperty() % % The format of the DefineImageProperty method is: % @@ -667,7 +667,7 @@ static MagickBooleanType Get8BIMProperty(const Image *image,const char *key, count=(ssize_t) ReadPropertyMSBLong(&info,&length); if ((count < 0) || ((size_t) count > length)) { - length=0; + length=0; continue; } if ((*name != '\0') && (*name != '#')) @@ -2792,13 +2792,6 @@ MagickExport const char *GetMagickProperty(ImageInfo *image_info, (void) ConcatenateMagickString(value,"a",MagickPathExtent); break; } - if (LocaleCompare("colors",property) == 0) - { - WarnNoImageReturn("\"%%[%s]\"",property); - (void) FormatLocaleString(value,MagickPathExtent,"%.20g",(double) - GetNumberColors(image,(FILE *) NULL,exception)); - break; - } if (LocaleCompare("colorspace",property) == 0) { WarnNoImageReturn("\"%%[%s]\"",property); @@ -2814,13 +2807,6 @@ MagickExport const char *GetMagickProperty(ImageInfo *image_info, image->compose); break; } - if (LocaleCompare("compression",property) == 0) - { - WarnNoImageReturn("\"%%[%s]\"",property); - string=CommandOptionToMnemonic(MagickCompressOptions,(ssize_t) - image->compression); - break; - } if (LocaleCompare("copyright",property) == 0) { (void) CopyMagickString(value,GetMagickCopyright(),MagickPathExtent); @@ -2900,13 +2886,6 @@ MagickExport const char *GetMagickProperty(ImageInfo *image_info, string=image->filename; break; } - if (LocaleCompare("interlace",property) == 0) - { - WarnNoImageReturn("\"%%[%s]\"",property); - string=CommandOptionToMnemonic(MagickInterlaceOptions,(ssize_t) - image->interlace); - break; - } break; } case 'k': @@ -3052,26 +3031,8 @@ MagickExport const char *GetMagickProperty(ImageInfo *image_info, } break; } - case 'q': - { - if (LocaleCompare("quality",property) == 0) - { - WarnNoImageReturn("\"%%[%s]\"",property); - (void) FormatLocaleString(value,MagickPathExtent,"%.*g", - GetMagickPrecision(),(double) image->quality); - break; - } - break; - } case 'r': { - if (LocaleCompare("rendering-intent",property) == 0) - { - WarnNoImageReturn("\"%%[%s]\"",property); - string=CommandOptionToMnemonic(MagickIntentOptions,(ssize_t) - image->rendering_intent); - break; - } if (LocaleCompare("resolution.x",property) == 0) { WarnNoImageReturn("\"%%[%s]\"",property); @@ -4001,7 +3962,7 @@ MagickExport MagickBooleanType SetImageProperty(Image *image, { /* Do not 'set' single letter properties - read only shorthand. - */ + */ (void) ThrowMagickException(exception,GetMagickModule(),OptionError, "SetReadOnlyProperty","`%s'",property); return(MagickFalse); @@ -4047,11 +4008,6 @@ MagickExport MagickBooleanType SetImageProperty(Image *image, "SetReadOnlyProperty","`%s'",property); return(MagickFalse); } - if (LocaleCompare("colors",property) == 0) - { - image->colors=GetNumberColors(image,(FILE *) NULL,exception); - return(MagickTrue); - } if (LocaleCompare("colorspace",property) == 0) { ssize_t @@ -4222,6 +4178,18 @@ MagickExport MagickBooleanType SetImageProperty(Image *image, image->intensity=(PixelIntensityMethod) intensity; return(MagickTrue); } + if (LocaleCompare("intent",property) == 0) + { + ssize_t + rendering_intent; + + rendering_intent=ParseCommandOption(MagickIntentOptions,MagickFalse, + value); + if (rendering_intent < 0) + return(MagickFalse); /* FUTURE: value exception?? */ + image->rendering_intent=(RenderingIntent) rendering_intent; + return(MagickTrue); + } if (LocaleCompare("interpolate",property) == 0) { ssize_t diff --git a/MagickCore/quantize.c b/MagickCore/quantize.c index 248d89ca6..48b456799 100644 --- a/MagickCore/quantize.c +++ b/MagickCore/quantize.c @@ -2189,7 +2189,6 @@ MagickExport MagickBooleanType GetImageQuantizeError(Image *image, area, beta, distance, - gamma, maximum_error, mean_error, mean_error_per_pixel; @@ -2256,10 +2255,10 @@ MagickExport MagickBooleanType GetImageQuantizeError(Image *image, } } image_view=DestroyCacheView(image_view); - gamma=PerceptibleReciprocal(area); - image->error.mean_error_per_pixel=gamma*mean_error_per_pixel; - image->error.normalized_mean_error=gamma*QuantumScale*QuantumScale*mean_error; - image->error.normalized_maximum_error=QuantumScale*maximum_error; + image->error.mean_error_per_pixel=(double) mean_error_per_pixel/area; + image->error.normalized_mean_error=(double) QuantumScale*QuantumScale* + mean_error/area; + image->error.normalized_maximum_error=(double) QuantumScale*maximum_error; return(MagickTrue); } diff --git a/MagickCore/quantum-export.c b/MagickCore/quantum-export.c index 8e5568bda..0f8315975 100644 --- a/MagickCore/quantum-export.c +++ b/MagickCore/quantum-export.c @@ -3920,7 +3920,7 @@ MagickExport size_t ExportQuantumPixels(const Image *image, register ssize_t i; - if (GetPixelWriteMask(image,q) == QuantumRange) + if (GetPixelReadMask(image,q) == 0) { q+=GetPixelChannels(image); continue; diff --git a/MagickCore/quantum-import.c b/MagickCore/quantum-import.c index 75bd06c0f..b3cdc7dc3 100644 --- a/MagickCore/quantum-import.c +++ b/MagickCore/quantum-import.c @@ -4280,7 +4280,7 @@ MagickExport size_t ImportQuantumPixels(const Image *image, register ssize_t i; - if (GetPixelWriteMask(image,q) == QuantumRange) + if (GetPixelReadMask(image,q) == 0) { q+=GetPixelChannels(image); continue; diff --git a/MagickCore/resize.c b/MagickCore/resize.c index 508d0c37b..d48cf88bc 100644 --- a/MagickCore/resize.c +++ b/MagickCore/resize.c @@ -1741,7 +1741,7 @@ MagickExport Image *InterpolativeResizeImage(const Image *image, register ssize_t i; - if (GetPixelWriteMask(resize_image,q) == QuantumRange) + if (GetPixelReadMask(resize_image,q) == 0) { q+=GetPixelChannels(resize_image); continue; @@ -2538,7 +2538,7 @@ static MagickBooleanType HorizontalFilter(const ResizeFilter *resize_filter, (resize_traits == UndefinedPixelTrait)) continue; if (((resize_traits & CopyPixelTrait) != 0) || - (GetPixelWriteMask(resize_image,q) == QuantumRange)) + (GetPixelReadMask(resize_image,q) == 0)) { j=(ssize_t) (MagickMin(MagickMax(bisect,(double) start),(double) stop-1.0)+0.5); @@ -2754,7 +2754,7 @@ static MagickBooleanType VerticalFilter(const ResizeFilter *resize_filter, (resize_traits == UndefinedPixelTrait)) continue; if (((resize_traits & CopyPixelTrait) != 0) || - (GetPixelWriteMask(resize_image,q) == QuantumRange)) + (GetPixelReadMask(resize_image,q) == 0)) { j=(ssize_t) (MagickMin(MagickMax(bisect,(double) start),(double) stop-1.0)+0.5); @@ -3089,7 +3089,7 @@ MagickExport Image *SampleImage(const Image *image,const size_t columns, register ssize_t i; - if (GetPixelWriteMask(sample_image,q) == QuantumRange) + if (GetPixelReadMask(sample_image,q) == 0) { q+=GetPixelChannels(sample_image); continue; @@ -3302,7 +3302,7 @@ MagickExport Image *ScaleImage(const Image *image,const size_t columns, } for (x=0; x < (ssize_t) image->columns; x++) { - if (GetPixelWriteMask(image,p) == QuantumRange) + if (GetPixelReadMask(image,p) == 0) { p+=GetPixelChannels(image); continue; @@ -3345,7 +3345,7 @@ MagickExport Image *ScaleImage(const Image *image,const size_t columns, } for (x=0; x < (ssize_t) image->columns; x++) { - if (GetPixelWriteMask(image,p) == QuantumRange) + if (GetPixelReadMask(image,p) == 0) { p+=GetPixelChannels(image); continue; @@ -3389,7 +3389,7 @@ MagickExport Image *ScaleImage(const Image *image,const size_t columns, } for (x=0; x < (ssize_t) image->columns; x++) { - if (GetPixelWriteMask(image,p) == QuantumRange) + if (GetPixelReadMask(image,p) == 0) { p+=GetPixelChannels(image); continue; @@ -3437,7 +3437,7 @@ MagickExport Image *ScaleImage(const Image *image,const size_t columns, */ for (x=0; x < (ssize_t) scale_image->columns; x++) { - if (GetPixelWriteMask(scale_image,q) == QuantumRange) + if (GetPixelReadMask(scale_image,q) == 0) { q+=GetPixelChannels(scale_image); continue; @@ -3533,7 +3533,7 @@ MagickExport Image *ScaleImage(const Image *image,const size_t columns, */ for (x=0; x < (ssize_t) scale_image->columns; x++) { - if (GetPixelWriteMask(scale_image,q) == QuantumRange) + if (GetPixelReadMask(scale_image,q) == 0) { q+=GetPixelChannels(scale_image); continue; diff --git a/MagickCore/shear.c b/MagickCore/shear.c index d5600610d..5d866b9eb 100644 --- a/MagickCore/shear.c +++ b/MagickCore/shear.c @@ -830,7 +830,7 @@ MagickExport Image *IntegralRotateImage(const Image *image,size_t rotations, register ssize_t i; - if (GetPixelWriteMask(image,tile_pixels) == QuantumRange) + if (GetPixelReadMask(image,tile_pixels) == 0) { tile_pixels-=width*GetPixelChannels(image); q+=GetPixelChannels(rotate_image); @@ -920,7 +920,7 @@ MagickExport Image *IntegralRotateImage(const Image *image,size_t rotations, i; q-=GetPixelChannels(rotate_image); - if (GetPixelWriteMask(image,p) == QuantumRange) + if (GetPixelReadMask(image,p) == 0) { p+=GetPixelChannels(image); continue; @@ -1043,7 +1043,7 @@ MagickExport Image *IntegralRotateImage(const Image *image,size_t rotations, register ssize_t i; - if (GetPixelWriteMask(image,tile_pixels) == QuantumRange) + if (GetPixelReadMask(image,tile_pixels) == 0) { tile_pixels+=width*GetPixelChannels(image); q+=GetPixelChannels(rotate_image); diff --git a/MagickCore/signature.c b/MagickCore/signature.c index c0d803df1..7051dbb38 100644 --- a/MagickCore/signature.c +++ b/MagickCore/signature.c @@ -520,7 +520,7 @@ MagickExport MagickBooleanType SignatureImage(Image *image, register ssize_t i; - if (GetPixelWriteMask(image,p) == QuantumRange) + if (GetPixelReadMask(image,p) == 0) { p+=GetPixelChannels(image); continue; diff --git a/MagickCore/splay-tree.c b/MagickCore/splay-tree.c index 6be31f7b2..7e772cd66 100644 --- a/MagickCore/splay-tree.c +++ b/MagickCore/splay-tree.c @@ -315,7 +315,7 @@ static void BalanceSplayTree(SplayTreeInfo *splay_tree) % The format of the CloneSplayTree method is: % % SplayTreeInfo *CloneSplayTree(SplayTreeInfo *splay_tree, -% void *(*clone_key)(void *),void *(*clone_value)(void *)) +% void *(*clone_key)(void *),void *(*cline_value)(void *)) % % A description of each parameter follows: % diff --git a/MagickCore/statistic.c b/MagickCore/statistic.c index 145b817d4..20558747f 100644 --- a/MagickCore/statistic.c +++ b/MagickCore/statistic.c @@ -1115,8 +1115,7 @@ MagickExport MagickBooleanType GetImageEntropy(const Image *image, double *entropy,ExceptionInfo *exception) { double - area, - gamma; + area; ChannelStatistics *channel_statistics; @@ -1146,11 +1145,12 @@ MagickExport MagickBooleanType GetImageEntropy(const Image *image, channel_statistics[i].entropy; area++; } - gamma=PerceptibleReciprocal(area); - channel_statistics[CompositePixelChannel].entropy*=gamma; - gamma=PerceptibleReciprocal(area-1.0); - channel_statistics[CompositePixelChannel].standard_deviation= - sqrt(gamma*channel_statistics[CompositePixelChannel].standard_deviation); + if (area > MagickEpsilon) + { + channel_statistics[CompositePixelChannel].entropy/=area; + channel_statistics[CompositePixelChannel].standard_deviation= + sqrt(channel_statistics[CompositePixelChannel].standard_deviation/area); + } *entropy=channel_statistics[CompositePixelChannel].entropy; channel_statistics=(ChannelStatistics *) RelinquishMagickMemory( channel_statistics); @@ -1378,8 +1378,7 @@ MagickExport MagickBooleanType GetImageMean(const Image *image,double *mean, double *standard_deviation,ExceptionInfo *exception) { double - area, - gamma; + area; ChannelStatistics *channel_statistics; @@ -1411,11 +1410,12 @@ MagickExport MagickBooleanType GetImageMean(const Image *image,double *mean, channel_statistics[i].mean; area++; } - gamma=PerceptibleReciprocal(area); - channel_statistics[CompositePixelChannel].mean*=gamma; - gamma=PerceptibleReciprocal(area-1.0); - channel_statistics[CompositePixelChannel].standard_deviation= - sqrt(gamma*channel_statistics[CompositePixelChannel].standard_deviation); + if (area > MagickEpsilon) + { + channel_statistics[CompositePixelChannel].mean/=area; + channel_statistics[CompositePixelChannel].standard_deviation= + sqrt(channel_statistics[CompositePixelChannel].standard_deviation/area); + } *mean=channel_statistics[CompositePixelChannel].mean; *standard_deviation= channel_statistics[CompositePixelChannel].standard_deviation; diff --git a/MagickCore/threshold.c b/MagickCore/threshold.c index 8f8c1fa43..a23b832f5 100644 --- a/MagickCore/threshold.c +++ b/MagickCore/threshold.c @@ -274,7 +274,7 @@ MagickExport Image *AdaptiveThresholdImage(const Image *image, (threshold_traits == UndefinedPixelTrait)) continue; if (((threshold_traits & CopyPixelTrait) != 0) || - (GetPixelWriteMask(image,p) == QuantumRange)) + (GetPixelReadMask(image,p) == 0)) { SetPixelChannel(threshold_image,channel,p[center+i],q); continue; @@ -309,7 +309,7 @@ MagickExport Image *AdaptiveThresholdImage(const Image *image, (threshold_traits == UndefinedPixelTrait)) continue; if (((threshold_traits & CopyPixelTrait) != 0) || - (GetPixelWriteMask(image,p) == QuantumRange)) + (GetPixelReadMask(image,p) == 0)) { SetPixelChannel(threshold_image,channel,p[center+i],q); continue; @@ -455,7 +455,7 @@ MagickExport MagickBooleanType BilevelImage(Image *image,const double threshold, register ssize_t i; - if (GetPixelWriteMask(image,q) == QuantumRange) + if (GetPixelReadMask(image,q) == 0) { q+=GetPixelChannels(image); continue; @@ -620,7 +620,7 @@ MagickExport MagickBooleanType BlackThresholdImage(Image *image, register ssize_t i; - if (GetPixelWriteMask(image,q) == QuantumRange) + if (GetPixelReadMask(image,q) == 0) { q+=GetPixelChannels(image); continue; @@ -756,7 +756,7 @@ MagickExport MagickBooleanType ClampImage(Image *image,ExceptionInfo *exception) register ssize_t i; - if (GetPixelWriteMask(image,q) == QuantumRange) + if (GetPixelReadMask(image,q) == 0) { q+=GetPixelChannels(image); continue; @@ -1397,7 +1397,7 @@ MagickExport MagickBooleanType OrderedDitherImage(Image *image, n; n=0; - if (GetPixelWriteMask(image,q) == QuantumRange) + if (GetPixelReadMask(image,q) == 0) { q+=GetPixelChannels(image); continue; @@ -1564,7 +1564,7 @@ MagickExport MagickBooleanType PerceptibleImage(Image *image, register ssize_t i; - if (GetPixelWriteMask(image,q) == QuantumRange) + if (GetPixelReadMask(image,q) == 0) { q+=GetPixelChannels(image); continue; @@ -1701,7 +1701,7 @@ MagickExport MagickBooleanType RandomThresholdImage(Image *image, register ssize_t i; - if (GetPixelWriteMask(image,q) == QuantumRange) + if (GetPixelReadMask(image,q) == 0) { q+=GetPixelChannels(image); continue; @@ -1875,7 +1875,7 @@ MagickExport MagickBooleanType WhiteThresholdImage(Image *image, register ssize_t i; - if (GetPixelWriteMask(image,q) == QuantumRange) + if (GetPixelReadMask(image,q) == 0) { q+=GetPixelChannels(image); continue; diff --git a/MagickCore/transform.c b/MagickCore/transform.c index fac4b08ef..68fdcfd57 100644 --- a/MagickCore/transform.c +++ b/MagickCore/transform.c @@ -697,7 +697,7 @@ MagickExport Image *CropImage(const Image *image,const RectangleInfo *geometry, register ssize_t i; - if (GetPixelWriteMask(image,p) == QuantumRange) + if (GetPixelReadMask(image,p) == 0) { SetPixelBackgoundColor(crop_image,q); p+=GetPixelChannels(image); @@ -1050,7 +1050,7 @@ MagickExport Image *ExcerptImage(const Image *image, register ssize_t i; - if (GetPixelWriteMask(image,p) == QuantumRange) + if (GetPixelReadMask(image,p) == 0) { SetPixelBackgoundColor(excerpt_image,q); p+=GetPixelChannels(image); @@ -1248,7 +1248,7 @@ MagickExport Image *FlipImage(const Image *image,ExceptionInfo *exception) register ssize_t i; - if (GetPixelWriteMask(image,p) == QuantumRange) + if (GetPixelReadMask(image,p) == 0) { SetPixelBackgoundColor(flip_image,q); p+=GetPixelChannels(image); @@ -1391,7 +1391,7 @@ MagickExport Image *FlopImage(const Image *image,ExceptionInfo *exception) i; q-=GetPixelChannels(flop_image); - if (GetPixelWriteMask(image,p) == QuantumRange) + if (GetPixelReadMask(image,p) == 0) { p+=GetPixelChannels(image); continue; @@ -1517,7 +1517,7 @@ static MagickBooleanType CopyImageRegion(Image *destination,const Image *source, register ssize_t i; - if (GetPixelWriteMask(source,p) == QuantumRange) + if (GetPixelReadMask(source,p) == 0) { SetPixelBackgoundColor(destination,q); p+=GetPixelChannels(source); @@ -1845,7 +1845,7 @@ MagickExport Image *SpliceImage(const Image *image, register ssize_t i; - if (GetPixelWriteMask(image,p) == QuantumRange) + if (GetPixelReadMask(image,p) == 0) { SetPixelBackgoundColor(splice_image,q); p+=GetPixelChannels(image); @@ -1876,7 +1876,7 @@ MagickExport Image *SpliceImage(const Image *image, register ssize_t i; - if (GetPixelWriteMask(image,p) == QuantumRange) + if (GetPixelReadMask(image,p) == 0) { SetPixelBackgoundColor(splice_image,q); p+=GetPixelChannels(image); @@ -1950,7 +1950,7 @@ MagickExport Image *SpliceImage(const Image *image, register ssize_t i; - if (GetPixelWriteMask(image,q) == QuantumRange) + if (GetPixelReadMask(image,q) == 0) { SetPixelBackgoundColor(splice_image,q); p+=GetPixelChannels(image); @@ -1981,7 +1981,7 @@ MagickExport Image *SpliceImage(const Image *image, register ssize_t i; - if (GetPixelWriteMask(image,q) == QuantumRange) + if (GetPixelReadMask(image,q) == 0) { SetPixelBackgoundColor(splice_image,q); p+=GetPixelChannels(image); @@ -2224,7 +2224,7 @@ MagickExport Image *TransposeImage(const Image *image,ExceptionInfo *exception) register ssize_t i; - if (GetPixelWriteMask(image,q) == QuantumRange) + if (GetPixelReadMask(image,q) == 0) { SetPixelBackgoundColor(transpose_image,q); p+=GetPixelChannels(image); @@ -2373,7 +2373,7 @@ MagickExport Image *TransverseImage(const Image *image,ExceptionInfo *exception) i; q-=GetPixelChannels(transverse_image); - if (GetPixelWriteMask(image,p) == QuantumRange) + if (GetPixelReadMask(image,p) == 0) { p+=GetPixelChannels(image); continue; diff --git a/MagickCore/utility.c b/MagickCore/utility.c index 9e4496138..a139caad0 100644 --- a/MagickCore/utility.c +++ b/MagickCore/utility.c @@ -1152,9 +1152,9 @@ MagickExport MagickBooleanType GetPathAttributes(const char *path, { MagickBooleanType status; - + if (path == (const char *) NULL) - { + { errno=EINVAL; return(MagickFalse); } diff --git a/MagickWand/compare.c b/MagickWand/compare.c index 9d5ed53b1..dd0f19314 100644 --- a/MagickWand/compare.c +++ b/MagickWand/compare.c @@ -129,7 +129,7 @@ static MagickBooleanType CompareUsage(void) "-quality value JPEG/MIFF/PNG compression level", "-quiet suppress all warning messages", "-quantize colorspace reduce colors in this colorspace", - "-read-mask filename associate a read mask with the image", + "-read-mask filename associate a read mask with the image" "-regard-warnings pay attention to warning messages", "-respect-parentheses settings remain in effect until parenthesis boundary", "-sampling-factor geometry", @@ -350,11 +350,10 @@ WandExport MagickBooleanType CompareImagesCommand(ImageInfo *image_info, i++; if (i == (ssize_t) argc) ThrowCompareException(OptionError,"MissingArgument",option); - type=ParseCommandOption(MagickAlphaChannelOptions,MagickFalse, - argv[i]); + type=ParseCommandOption(MagickAlphaChannelOptions,MagickFalse,argv[i]); if (type < 0) - ThrowCompareException(OptionError, - "UnrecognizedAlphaChannelOption",argv[i]); + ThrowCompareException(OptionError,"UnrecognizedAlphaChannelOption", + argv[i]); break; } if (LocaleCompare("authenticate",option+1) == 0) diff --git a/MagickWand/convert.c b/MagickWand/convert.c index 5cde54202..508c4c6f4 100644 --- a/MagickWand/convert.c +++ b/MagickWand/convert.c @@ -1004,9 +1004,8 @@ WandExport MagickBooleanType ConvertImageCommand(ImageInfo *image_info, *clone_images, *clone_list; - if (k == 0) - clone_list=CloneImageList(image,exception); - else + clone_list=CloneImageList(image,exception); + if (k != 0) clone_list=CloneImageList(image_stack[k-1].image,exception); if (clone_list == (Image *) NULL) ThrowConvertException(ImageError,"ImageSequenceRequired",option); @@ -2259,7 +2258,8 @@ WandExport MagickBooleanType ConvertImageCommand(ImageInfo *image_info, ssize_t noise; - noise=ParseCommandOption(MagickNoiseOptions,MagickFalse,argv[i]); + noise=ParseCommandOption(MagickNoiseOptions,MagickFalse, + argv[i]); if (noise < 0) ThrowConvertException(OptionError,"UnrecognizedNoiseType", argv[i]); diff --git a/MagickWand/mogrify.c b/MagickWand/mogrify.c index 9ce3f2726..e9fee7f10 100644 --- a/MagickWand/mogrify.c +++ b/MagickWand/mogrify.c @@ -367,7 +367,7 @@ static inline Image *GetImageCache(const ImageInfo *image_info,const char *path, key[MagickPathExtent]; ExceptionInfo - *sansexception; + *sans_exception; Image *image; @@ -380,9 +380,9 @@ static inline Image *GetImageCache(const ImageInfo *image_info,const char *path, cache. Then return the image that is in the cache. */ (void) FormatLocaleString(key,MagickPathExtent,"cache:%s",path); - sansexception=AcquireExceptionInfo(); - image=(Image *) GetImageRegistry(ImageRegistryType,key,sansexception); - sansexception=DestroyExceptionInfo(sansexception); + sans_exception=AcquireExceptionInfo(); + image=(Image *) GetImageRegistry(ImageRegistryType,key,sans_exception); + sans_exception=DestroyExceptionInfo(sans_exception); if (image != (Image *) NULL) return(image); read_info=CloneImageInfo(image_info); @@ -2132,7 +2132,7 @@ WandExport MagickBooleanType MogrifyImage(ImageInfo *image_info,const int argc, /* Remove a mask. */ - (void) SetImageMask(*image,WritePixelMask,(Image *) NULL, + (void) SetImageMask(*image,ReadPixelMask,(Image *) NULL, exception); break; } @@ -2142,7 +2142,7 @@ WandExport MagickBooleanType MogrifyImage(ImageInfo *image_info,const int argc, mask=GetImageCache(mogrify_info,argv[i+1],exception); if (mask == (Image *) NULL) break; - (void) SetImageMask(*image,WritePixelMask,mask,exception); + (void) SetImageMask(*image,ReadPixelMask,mask,exception); mask=DestroyImage(mask); break; } @@ -7894,112 +7894,100 @@ WandExport MagickBooleanType MogrifyImageList(ImageInfo *image_info, } if (LocaleCompare("composite",option+1) == 0) { - CompositeOperator - compose; + const char + *value; - const char* - value; + Image + *mask_image, + *composite_image, + *image; MagickBooleanType clip_to_self; - Image - *mask_image, - *new_images, - *source_image; - RectangleInfo geometry; (void) SyncImagesSettings(mogrify_info,*images,exception); - /* Compose value from "-compose" option only */ - value=GetImageOption(mogrify_info,"compose"); - if (value == (const char *) NULL) - compose=OverCompositeOp; /* use Over not source_image->compose */ - else - compose=(CompositeOperator) ParseCommandOption( - MagickComposeOptions,MagickFalse,value); - - /* Get "clip-to-self" expert setting (false is normal) */ value=GetImageOption(mogrify_info,"compose:clip-to-self"); if (value == (const char *) NULL) clip_to_self=MagickTrue; else clip_to_self=IsStringTrue(GetImageOption(mogrify_info, "compose:clip-to-self")); /* if this is true */ - value=GetImageOption(mogrify_info,"compose:outside-overlay"); - if (value != (const char *) NULL) { /* or this false */ - /* FUTURE: depreciate warning for "compose:outside-overlay"*/ - clip_to_self=IsStringFalse(value); - } - - new_images=RemoveFirstImageFromList(images); - source_image=RemoveFirstImageFromList(images); - if (source_image == (Image *) NULL) - break; /* FUTURE - produce Exception, rather than silent fail */ - - /* FUTURE - this should not be here!- should be part of -geometry */ - if (source_image->geometry != (char *) NULL) + if (clip_to_self == MagickFalse) /* or */ + clip_to_self=IsStringFalse(GetImageOption(mogrify_info, + "compose:outside-overlay")); + image=RemoveFirstImageFromList(images); + composite_image=RemoveFirstImageFromList(images); + if (composite_image == (Image *) NULL) + { + status=MagickFalse; + break; + } + if (composite_image->geometry != (char *) NULL) { RectangleInfo resize_geometry; - (void) ParseRegionGeometry(source_image,source_image->geometry, - &resize_geometry,exception); - if ((source_image->columns != resize_geometry.width) || - (source_image->rows != resize_geometry.height)) + (void) ParseRegionGeometry(composite_image, + composite_image->geometry,&resize_geometry,exception); + if ((composite_image->columns != resize_geometry.width) || + (composite_image->rows != resize_geometry.height)) { Image *resize_image; - resize_image=ResizeImage(source_image,resize_geometry.width, - resize_geometry.height,source_image->filter,exception); + resize_image=ResizeImage(composite_image, + resize_geometry.width,resize_geometry.height, + composite_image->filter,exception); if (resize_image != (Image *) NULL) { - source_image=DestroyImage(source_image); - source_image=resize_image; + composite_image=DestroyImage(composite_image); + composite_image=resize_image; } } } - SetGeometry(source_image,&geometry); - (void) ParseAbsoluteGeometry(source_image->geometry,&geometry); - GravityAdjustGeometry(new_images->columns,new_images->rows, - new_images->gravity, &geometry); + SetGeometry(composite_image,&geometry); + (void) ParseAbsoluteGeometry(composite_image->geometry,&geometry); + GravityAdjustGeometry(image->columns,image->rows,image->gravity, + &geometry); mask_image=RemoveFirstImageFromList(images); if (mask_image == (Image *) NULL) - status&=CompositeImage(new_images,source_image,compose, + (void) CompositeImage(image,composite_image,image->compose, clip_to_self,geometry.x,geometry.y,exception); else { - if ((compose == DisplaceCompositeOp) || - (compose == DistortCompositeOp)) + if ((image->compose != DisplaceCompositeOp) && + (image->compose != DistortCompositeOp)) { - status&=CompositeImage(source_image,mask_image, + status&=CompositeImage(composite_image,mask_image, CopyGreenCompositeOp,MagickTrue,0,0,exception); - status&=CompositeImage(new_images,source_image,compose, + (void) CompositeImage(image,composite_image,image->compose, clip_to_self,geometry.x,geometry.y,exception); } - else + else { Image *clone_image; - clone_image=CloneImage(new_images,0,0,MagickTrue,exception); + clone_image=CloneImage(image,0,0,MagickTrue,exception); if (clone_image == (Image *) NULL) break; - status&=CompositeImage(new_images,source_image,compose, + (void) CompositeImage(image,composite_image,image->compose, clip_to_self,geometry.x,geometry.y,exception); - status&=CompositeImage(new_images,mask_image, + status&=CompositeImage(image,mask_image, CopyAlphaCompositeOp,MagickTrue,0,0,exception); - status&=CompositeImage(clone_image,new_images, - OverCompositeOp,clip_to_self,0,0,exception); - new_images=DestroyImage(new_images); - new_images=clone_image; + status&=CompositeImage(clone_image,image,OverCompositeOp, + clip_to_self,0,0,exception); + image=DestroyImage(image); + image=clone_image; } mask_image=DestroyImage(mask_image); } - source_image=DestroyImage(source_image); - *images=new_images; + composite_image=DestroyImage(composite_image); + *images=DestroyImageList(*images); + *images=image; break; } if (LocaleCompare("copy",option+1) == 0) diff --git a/MagickWand/montage.c b/MagickWand/montage.c index c6d0da4c1..570195a56 100644 --- a/MagickWand/montage.c +++ b/MagickWand/montage.c @@ -265,8 +265,6 @@ WandExport MagickBooleanType MontageImageCommand(ImageInfo *image_info, { #define DestroyMontage() \ { \ - if (montage_info != (MontageInfo *) NULL) \ - montage_info=DestroyMontageInfo(montage_info); \ if (montage_image != (Image *) NULL) \ montage_image=DestroyImageList(montage_image); \ DestroyImageStack(); \ @@ -635,9 +633,8 @@ WandExport MagickBooleanType MontageImageCommand(ImageInfo *image_info, *clone_images, *clone_list; - if (k == 0) - clone_list=CloneImageList(image,exception); - else + clone_list=CloneImageList(image,exception); + if (k != 0) clone_list=CloneImageList(image_stack[k-1].image,exception); if (clone_list == (Image *) NULL) ThrowMontageException(ImageError,"ImageSequenceRequired",option); diff --git a/MagickWand/operation.c b/MagickWand/operation.c index dcf7a4c84..14d3795f6 100644 --- a/MagickWand/operation.c +++ b/MagickWand/operation.c @@ -1296,7 +1296,7 @@ WandPrivate void CLISettingOptionInfo(MagickCLI *cli_wand, _draw_info->render= ArgBooleanNot; break; } - if (LocaleCompare("respect-parentheses",option+1) == 0) + if (LocaleCompare("respect-parenthesis",option+1) == 0) { /* link image and setting stacks - option is itself saved on stack! */ (void) SetImageOption(_image_info,option+1,ArgBooleanString); @@ -2732,8 +2732,8 @@ static MagickBooleanType CLISimpleOperatorImage(MagickCLI *cli_wand, } if (LocaleCompare("mask",option+1) == 0) { - CLIWandWarnReplaced("-write-mask"); - (void) CLISimpleOperatorImage(cli_wand,"-write-mask",NULL,NULL, + CLIWandWarnReplaced("-read-mask"); + (void) CLISimpleOperatorImage(cli_wand,"-read-mask",NULL,NULL, exception); break; } @@ -4786,9 +4786,9 @@ WandPrivate void CLINoImageOperator(MagickCLI *cli_wand, cli_wand->image_list_stack = node; cli_wand->wand.images = NewImageList(); - /* handle respect-parentheses */ + /* handle respect-parenthesis */ if (IsStringTrue(GetImageOption(cli_wand->wand.image_info, - "respect-parentheses")) != MagickFalse) + "respect-parenthesis")) != MagickFalse) option="{"; /* fall-thru so as to push image settings too */ else break; @@ -4842,12 +4842,12 @@ WandPrivate void CLINoImageOperator(MagickCLI *cli_wand, cli_wand->wand.images= (Image *)node->data; node = (Stack *)RelinquishMagickMemory(node); - /* handle respect-parentheses - of the previous 'pushed' settings */ + /* handle respect-parenthesis - of the previous 'pushed' settings */ node = cli_wand->image_info_stack; if ( node != (Stack *) NULL) { if (IsStringTrue(GetImageOption( - cli_wand->wand.image_info,"respect-parentheses")) != MagickFalse) + cli_wand->wand.image_info,"respect-parenthesis")) != MagickFalse) option="}"; /* fall-thru so as to pop image settings too */ else break; -- 2.50.1