From 28474bfbda5ee2d4da2eb79f299cf1f692770b99 Mon Sep 17 00:00:00 2001 From: cristy Date: Sun, 11 Sep 2011 23:32:52 +0000 Subject: [PATCH] --- MagickCore/fx.c | 68 ++++++++++++++++++++----------- MagickCore/fx.h | 2 +- MagickCore/pixel.c | 35 ++++++++-------- MagickWand/magick-image.c | 6 +-- MagickWand/mogrify.c | 85 +++++++++++++++++++-------------------- MagickWand/pixel-wand.c | 31 ++++++++++++++ MagickWand/pixel-wand.h | 3 ++ PerlMagick/Magick.xs | 10 ++--- PerlMagick/demo/demo.pl | 6 +++ 9 files changed, 150 insertions(+), 96 deletions(-) diff --git a/MagickCore/fx.c b/MagickCore/fx.c index 60fef46c2..a5cc29670 100644 --- a/MagickCore/fx.c +++ b/MagickCore/fx.c @@ -406,9 +406,8 @@ MagickExport Image *AddNoiseImage(const Image *image,const NoiseType noise_type, (image->colorspace == CMYKColorspace)) SetPixelBlack(noise_image,ClampToQuantum(GenerateDifferentialNoise( random_info[id],GetPixelBlack(image,p),noise_type,attenuate)),q); - if ((GetPixelAlphaTraits(image) & UpdatePixelTrait) != 0) - SetPixelAlpha(noise_image,ClampToQuantum(GenerateDifferentialNoise( - random_info[id],GetPixelAlpha(image,p),noise_type,attenuate)),q); + if ((GetPixelAlphaTraits(image) & CopyPixelTrait) != 0) + SetPixelAlpha(noise_image,GetPixelAlpha(image,p),q); p+=GetPixelChannels(image); q+=GetPixelChannels(noise_image); } @@ -5043,7 +5042,7 @@ MagickExport Image *SwirlImage(const Image *image,double degrees, % The format of the TintImage method is: % % Image *TintImage(const Image *image,const char *opacity, -% const PixelPacket tint,ExceptionInfo *exception) +% const PixelInfo *tint,ExceptionInfo *exception) % % A description of each parameter follows: % @@ -5057,7 +5056,7 @@ MagickExport Image *SwirlImage(const Image *image,double degrees, % */ MagickExport Image *TintImage(const Image *image,const char *opacity, - const PixelPacket tint,ExceptionInfo *exception) + const PixelInfo *tint,ExceptionInfo *exception) { #define TintImageTag "Tint/Image" @@ -5077,6 +5076,9 @@ MagickExport Image *TintImage(const Image *image,const char *opacity, MagickOffsetType progress; + MagickRealType + intensity; + PixelInfo color_vector, pixel; @@ -5109,6 +5111,7 @@ MagickExport Image *TintImage(const Image *image,const char *opacity, /* Determine RGB values of the color. */ + GetPixelInfo(image,&pixel); flags=ParseGeometry(opacity,&geometry_info); pixel.red=geometry_info.rho; if ((flags & SigmaValue) != 0) @@ -5123,12 +5126,12 @@ MagickExport Image *TintImage(const Image *image,const char *opacity, pixel.alpha=geometry_info.psi; else pixel.alpha=(MagickRealType) OpaqueAlpha; - color_vector.red=(MagickRealType) (pixel.red*tint.red/100.0- - GetPixelPacketIntensity(&tint)); - color_vector.green=(MagickRealType) (pixel.green*tint.green/100.0- - GetPixelPacketIntensity(&tint)); - color_vector.blue=(MagickRealType) (pixel.blue*tint.blue/100.0- - GetPixelPacketIntensity(&tint)); + intensity=(MagickRealType) GetPixelInfoIntensity(tint); + color_vector.red=(MagickRealType) (pixel.red*tint->red/100.0-intensity); + color_vector.green=(MagickRealType) (pixel.green*tint->green/100.0-intensity); + color_vector.blue=(MagickRealType) (pixel.blue*tint->blue/100.0-intensity); + color_vector.black=(MagickRealType) (pixel.black*tint->black/100.0-intensity); + color_vector.alpha=(MagickRealType) (pixel.alpha*tint->alpha/100.0-intensity); /* Tint image. */ @@ -5168,19 +5171,36 @@ MagickExport Image *TintImage(const Image *image,const char *opacity, MagickRealType weight; - weight=QuantumScale*GetPixelRed(image,p)-0.5; - pixel.red=(MagickRealType) GetPixelRed(image,p)+color_vector.red* - (1.0-(4.0*(weight*weight))); - SetPixelRed(tint_image,ClampToQuantum(pixel.red),q); - weight=QuantumScale*GetPixelGreen(image,p)-0.5; - pixel.green=(MagickRealType) GetPixelGreen(image,p)+color_vector.green* - (1.0-(4.0*(weight*weight))); - SetPixelGreen(tint_image,ClampToQuantum(pixel.green),q); - weight=QuantumScale*GetPixelBlue(image,p)-0.5; - pixel.blue=(MagickRealType) GetPixelBlue(image,p)+color_vector.blue* - (1.0-(4.0*(weight*weight))); - SetPixelBlue(tint_image,ClampToQuantum(pixel.blue),q); - SetPixelAlpha(tint_image,GetPixelAlpha(image,p),q); + if ((GetPixelRedTraits(image) & UpdatePixelTrait) != 0) + { + weight=QuantumScale*GetPixelRed(image,p)-0.5; + pixel.red=(MagickRealType) GetPixelRed(image,p)+ + color_vector.red*(1.0-(4.0*(weight*weight))); + SetPixelRed(tint_image,ClampToQuantum(pixel.red),q); + } + if ((GetPixelGreenTraits(image) & UpdatePixelTrait) != 0) + { + weight=QuantumScale*GetPixelGreen(image,p)-0.5; + pixel.green=(MagickRealType) GetPixelGreen(image,p)+ + color_vector.green*(1.0-(4.0*(weight*weight))); + SetPixelGreen(tint_image,ClampToQuantum(pixel.green),q); + } + if ((GetPixelBlueTraits(image) & UpdatePixelTrait) != 0) + { + weight=QuantumScale*GetPixelBlue(image,p)-0.5; + pixel.blue=(MagickRealType) GetPixelBlue(image,p)+ + color_vector.blue*(1.0-(4.0*(weight*weight))); + SetPixelBlue(tint_image,ClampToQuantum(pixel.blue),q); + } + if ((GetPixelBlackTraits(image) & UpdatePixelTrait) != 0) + { + weight=QuantumScale*GetPixelBlack(image,p)-0.5; + pixel.black=(MagickRealType) GetPixelBlack(image,p)+ + color_vector.black*(1.0-(4.0*(weight*weight))); + SetPixelBlack(tint_image,ClampToQuantum(pixel.black),q); + } + if ((GetPixelAlphaTraits(image) & CopyPixelTrait) != 0) + SetPixelAlpha(tint_image,GetPixelAlpha(image,p),q); p+=GetPixelChannels(image); q+=GetPixelChannels(tint_image); } diff --git a/MagickCore/fx.h b/MagickCore/fx.h index 33250defe..f5f60a8e6 100644 --- a/MagickCore/fx.h +++ b/MagickCore/fx.h @@ -58,7 +58,7 @@ extern MagickExport Image *StereoAnaglyphImage(const Image *,const Image *,const ssize_t,const ssize_t, ExceptionInfo *), *SwirlImage(const Image *,double,ExceptionInfo *), - *TintImage(const Image *,const char *,const PixelPacket,ExceptionInfo *), + *TintImage(const Image *,const char *,const PixelInfo *,ExceptionInfo *), *VignetteImage(const Image *,const double,const double,const ssize_t, const ssize_t,ExceptionInfo *), *WaveImage(const Image *,const double,const double, diff --git a/MagickCore/pixel.c b/MagickCore/pixel.c index 9f9cf08f5..79c890b2e 100644 --- a/MagickCore/pixel.c +++ b/MagickCore/pixel.c @@ -3927,7 +3927,7 @@ MagickExport MagickBooleanType InterpolatePixelChannel(const Image *image, delta.y=y-y_offset; luminance.x=GetPixelLuminance(image,p)-(double) GetPixelLuminance(image,p+3*GetPixelChannels(image)); - luminance.y=GetPixelLuminance(image,p+1*GetPixelChannels(image))-(double) + luminance.y=GetPixelLuminance(image,p+GetPixelChannels(image))-(double) GetPixelLuminance(image,p+2*GetPixelChannels(image)); if (fabs(luminance.x) < fabs(luminance.y)) { @@ -4247,8 +4247,8 @@ MagickExport MagickBooleanType InterpolatePixelChannels(const Image *source, delta.y=y-y_offset; epsilon.x=1.0-delta.x; epsilon.y=1.0-delta.y; - pixels[0]=(MagickRealType) p[0*GetPixelChannels(source)+i]; - pixels[1]=(MagickRealType) p[1*GetPixelChannels(source)+i]; + pixels[0]=(MagickRealType) p[i]; + pixels[1]=(MagickRealType) p[GetPixelChannels(source)+i]; pixels[2]=(MagickRealType) p[2*GetPixelChannels(source)+i]; pixels[3]=(MagickRealType) p[3*GetPixelChannels(source)+i]; if ((traits & BlendPixelTrait) == 0) @@ -4260,10 +4260,8 @@ MagickExport MagickBooleanType InterpolatePixelChannels(const Image *source, pixels[3]))); continue; } - alpha[0]=QuantumScale*GetPixelAlpha(source,p+0* - GetPixelChannels(source)); - alpha[1]=QuantumScale*GetPixelAlpha(source,p+1* - GetPixelChannels(source)); + alpha[0]=QuantumScale*GetPixelAlpha(source,p); + alpha[1]=QuantumScale*GetPixelAlpha(source,p+GetPixelChannels(source)); alpha[2]=QuantumScale*GetPixelAlpha(source,p+2* GetPixelChannels(source)); alpha[3]=QuantumScale*GetPixelAlpha(source,p+3* @@ -4387,8 +4385,8 @@ MagickExport MagickBooleanType InterpolatePixelChannels(const Image *source, if ((traits == UndefinedPixelTrait) || (destination_traits == UndefinedPixelTrait)) continue; - pixels[0]=(MagickRealType) p[0*GetPixelChannels(source)+i]; - pixels[1]=(MagickRealType) p[1*GetPixelChannels(source)+i]; + pixels[0]=(MagickRealType) p[i]; + pixels[1]=(MagickRealType) p[GetPixelChannels(source)+i]; pixels[2]=(MagickRealType) p[2*GetPixelChannels(source)+i]; pixels[3]=(MagickRealType) p[3*GetPixelChannels(source)+i]; if ((traits & BlendPixelTrait) == 0) @@ -4400,9 +4398,8 @@ MagickExport MagickBooleanType InterpolatePixelChannels(const Image *source, } else { - alpha[0]=QuantumScale*GetPixelAlpha(source,p+0* - GetPixelChannels(source)); - alpha[1]=QuantumScale*GetPixelAlpha(source,p+1* + alpha[0]=QuantumScale*GetPixelAlpha(source,p); + alpha[1]=QuantumScale*GetPixelAlpha(source,p+ GetPixelChannels(source)); alpha[2]=QuantumScale*GetPixelAlpha(source,p+2* GetPixelChannels(source)); @@ -4413,7 +4410,7 @@ MagickExport MagickBooleanType InterpolatePixelChannels(const Image *source, delta.y=y-y_offset; luminance.x=GetPixelLuminance(source,p)-(double) GetPixelLuminance(source,p+3*GetPixelChannels(source)); - luminance.y=GetPixelLuminance(source,p+1*GetPixelChannels(source))- + luminance.y=GetPixelLuminance(source,p+GetPixelChannels(source))- (double) GetPixelLuminance(source,p+2*GetPixelChannels(source)); if (fabs(luminance.x) < fabs(luminance.y)) { @@ -4691,7 +4688,7 @@ MagickExport MagickBooleanType InterpolatePixelInfo(const Image *image, break; } AlphaBlendPixelInfo(image,p,pixels+0,alpha+0); - AlphaBlendPixelInfo(image,p+1*GetPixelChannels(image),pixels+1,alpha+1); + AlphaBlendPixelInfo(image,p+GetPixelChannels(image),pixels+1,alpha+1); AlphaBlendPixelInfo(image,p+2*GetPixelChannels(image),pixels+2,alpha+2); AlphaBlendPixelInfo(image,p+3*GetPixelChannels(image),pixels+3,alpha+3); AlphaBlendPixelInfo(image,p+4*GetPixelChannels(image),pixels+4,alpha+4); @@ -4745,7 +4742,7 @@ MagickExport MagickBooleanType InterpolatePixelInfo(const Image *image, break; } AlphaBlendPixelInfo(image,p,pixels+0,alpha+0); - AlphaBlendPixelInfo(image,p+1*GetPixelChannels(image),pixels+1,alpha+1); + AlphaBlendPixelInfo(image,p+GetPixelChannels(image),pixels+1,alpha+1); AlphaBlendPixelInfo(image,p+2*GetPixelChannels(image),pixels+2,alpha+2); AlphaBlendPixelInfo(image,p+3*GetPixelChannels(image),pixels+3,alpha+3); AlphaBlendPixelInfo(image,p+4*GetPixelChannels(image),pixels+4,alpha+4); @@ -4787,7 +4784,7 @@ MagickExport MagickBooleanType InterpolatePixelInfo(const Image *image, break; } AlphaBlendPixelInfo(image,p,pixels+0,alpha+0); - AlphaBlendPixelInfo(image,p+1*GetPixelChannels(image),pixels+1,alpha+1); + AlphaBlendPixelInfo(image,p+GetPixelChannels(image),pixels+1,alpha+1); AlphaBlendPixelInfo(image,p+2*GetPixelChannels(image),pixels+2,alpha+2); AlphaBlendPixelInfo(image,p+3*GetPixelChannels(image),pixels+3,alpha+3); delta.x=x-x_offset; @@ -4878,10 +4875,10 @@ MagickExport MagickBooleanType InterpolatePixelInfo(const Image *image, delta.y=y-y_offset; luminance.x=GetPixelLuminance(image,p)-(double) GetPixelLuminance(image,p+3*GetPixelChannels(image)); - luminance.y=GetPixelLuminance(image,p+1*GetPixelChannels(image))-(double) + luminance.y=GetPixelLuminance(image,p+GetPixelChannels(image))-(double) GetPixelLuminance(image,p+2*GetPixelChannels(image)); AlphaBlendPixelInfo(image,p,pixels+0,alpha+0); - AlphaBlendPixelInfo(image,p+1*GetPixelChannels(image),pixels+1,alpha+1); + AlphaBlendPixelInfo(image,p+GetPixelChannels(image),pixels+1,alpha+1); AlphaBlendPixelInfo(image,p+2*GetPixelChannels(image),pixels+2,alpha+2); AlphaBlendPixelInfo(image,p+3*GetPixelChannels(image),pixels+3,alpha+3); if (fabs(luminance.x) < fabs(luminance.y)) @@ -5015,7 +5012,7 @@ MagickExport MagickBooleanType InterpolatePixelInfo(const Image *image, break; } AlphaBlendPixelInfo(image,p,pixels+0,alpha+0); - AlphaBlendPixelInfo(image,p+1*GetPixelChannels(image),pixels+1,alpha+1); + AlphaBlendPixelInfo(image,p+GetPixelChannels(image),pixels+1,alpha+1); AlphaBlendPixelInfo(image,p+2*GetPixelChannels(image),pixels+2,alpha+2); AlphaBlendPixelInfo(image,p+3*GetPixelChannels(image),pixels+3,alpha+3); AlphaBlendPixelInfo(image,p+4*GetPixelChannels(image),pixels+4,alpha+4); diff --git a/MagickWand/magick-image.c b/MagickWand/magick-image.c index a08c00c73..2da578478 100644 --- a/MagickWand/magick-image.c +++ b/MagickWand/magick-image.c @@ -11273,7 +11273,7 @@ WandExport MagickBooleanType MagickTintImage(MagickWand *wand, Image *tint_image; - PixelPacket + PixelInfo target; assert(wand != (MagickWand *) NULL); @@ -11288,8 +11288,8 @@ WandExport MagickBooleanType MagickTintImage(MagickWand *wand, PixelGetGreenQuantum(opacity)),(double) (100.0*QuantumScale* PixelGetBlueQuantum(opacity)),(double) (100.0*QuantumScale* PixelGetOpacityQuantum(opacity))); - PixelGetQuantumPacket(tint,&target); - tint_image=TintImage(wand->images,percent_opaque,target,wand->exception); + target=PixelGetPixel(tint); + tint_image=TintImage(wand->images,percent_opaque,&target,wand->exception); if (tint_image == (Image *) NULL) return(MagickFalse); ReplaceImageInList(&wand->images,tint_image); diff --git a/MagickWand/mogrify.c b/MagickWand/mogrify.c index 2aaaa93fd..6dbdfa48a 100644 --- a/MagickWand/mogrify.c +++ b/MagickWand/mogrify.c @@ -384,14 +384,6 @@ static MagickBooleanType MonitorProgress(const char *text, return(MagickTrue); } -/* -** SparseColorOption() parses the complex -sparse-color argument into an -** an array of floating point values then calls SparseColorImage(). -** Argument is a complex mix of floating-point pixel coodinates, and color -** specifications (or direct floating point numbers). The number of floats -** needed to represent a color varies depending on the current channel -** setting. -*/ static Image *SparseColorOption(const Image *image, const SparseColorMethod method,const char *arguments, const MagickBooleanType color_from_image,ExceptionInfo *exception) @@ -421,6 +413,14 @@ static Image *SparseColorOption(const Image *image, number_arguments, number_colors; + /* + SparseColorOption() parses the complex -sparse-color argument into an + an array of floating point values then calls SparseColorImage(). + Argument is a complex mix of floating-point pixel coodinates, and color + specifications (or direct floating point numbers). The number of floats + needed to represent a color varies depending on the current channel + setting. + */ assert(image != (Image *) NULL); assert(image->signature == MagickSignature); if (image->debug != MagickFalse) @@ -642,6 +642,9 @@ WandExport MagickBooleanType MogrifyImage(ImageInfo *image_info,const int argc, MagickStatusType flags; + PixelInterpolateMethod + interpolate_method; + QuantizeInfo *quantize_info; @@ -669,6 +672,7 @@ WandExport MagickBooleanType MogrifyImage(ImageInfo *image_info,const int argc, SetGeometryInfo(&geometry_info); GetPixelInfo(*image,&fill); SetPixelInfoPacket(*image,&(*image)->background_color,&fill); + interpolate_method=UndefinedInterpolatePixel; channel=mogrify_info->channel; format=GetImageOption(mogrify_info,"format"); SetGeometry(*image,®ion_geometry); @@ -720,7 +724,7 @@ WandExport MagickBooleanType MogrifyImage(ImageInfo *image_info,const int argc, (void) SyncImageSettings(mogrify_info,*image); (void) ParseRegionGeometry(*image,argv[i+1],&geometry,exception); mogrify_image=AdaptiveResizeImage(*image,geometry.width, - geometry.height,(*image)->interpolate,exception); + geometry.height,interpolate_method,exception); break; } if (LocaleCompare("adaptive-sharpen",option+1) == 0) @@ -1800,6 +1804,12 @@ WandExport MagickBooleanType MogrifyImage(ImageInfo *image_info,const int argc, draw_info->interline_spacing=geometry_info.rho; break; } + if (LocaleCompare("interpolate",option+1) == 0) + { + interpolate_method=(PixelInterpolateMethod) ParseCommandOption( + MagickInterpolateOptions,MagickFalse,argv[i+1]); + break; + } if (LocaleCompare("interword-spacing",option+1) == 0) { if (*option == '+') @@ -2091,8 +2101,8 @@ WandExport MagickBooleanType MogrifyImage(ImageInfo *image_info,const int argc, (void) SyncImageSettings(mogrify_info,*image); p=argv[i+1]; GetMagickToken(p,&p,token); - method=(MorphologyMethod) ParseCommandOption(MagickMorphologyOptions, - MagickFalse,token); + method=(MorphologyMethod) ParseCommandOption( + MagickMorphologyOptions,MagickFalse,token); iterations=1L; GetMagickToken(p,&p,token); if ((*p == ':') || (*p == ',')) @@ -2239,7 +2249,7 @@ WandExport MagickBooleanType MogrifyImage(ImageInfo *image_info,const int argc, angle=geometry_info.rho; } mogrify_image=PolaroidImage(*image,draw_info,angle, - (*image)->interpolate,exception); + interpolate_method,exception); break; } if (LocaleCompare("posterize",option+1) == 0) @@ -2264,8 +2274,8 @@ WandExport MagickBooleanType MogrifyImage(ImageInfo *image_info,const int argc, if (*option == '+') preview_type=UndefinedPreview; else - preview_type=(PreviewType) ParseCommandOption(MagickPreviewOptions, - MagickFalse,argv[i+1]); + preview_type=(PreviewType) ParseCommandOption( + MagickPreviewOptions,MagickFalse,argv[i+1]); mogrify_image=PreviewImage(*image,preview_type,exception); break; } @@ -2791,7 +2801,7 @@ WandExport MagickBooleanType MogrifyImage(ImageInfo *image_info,const int argc, (void) SyncImageSettings(mogrify_info,*image); (void) ParseGeometry(argv[i+1],&geometry_info); mogrify_image=SpreadImage(*image,geometry_info.rho, - (*image)->interpolate,exception); + interpolate_method,exception); break; } if (LocaleCompare("statistic",option+1) == 0) @@ -2926,7 +2936,7 @@ WandExport MagickBooleanType MogrifyImage(ImageInfo *image_info,const int argc, Tint the image. */ (void) SyncImageSettings(mogrify_info,*image); - mogrify_image=TintImage(*image,argv[i+1],draw_info->fill,exception); + mogrify_image=TintImage(*image,argv[i+1],&fill,exception); break; } if (LocaleCompare("transform",option+1) == 0) @@ -3100,7 +3110,7 @@ WandExport MagickBooleanType MogrifyImage(ImageInfo *image_info,const int argc, if ((flags & SigmaValue) == 0) geometry_info.sigma=1.0; mogrify_image=WaveImage(*image,geometry_info.rho, - geometry_info.sigma,(*image)->interpolate,exception); + geometry_info.sigma,interpolate_method,exception); break; } if (LocaleCompare("weight",option+1) == 0) @@ -7224,6 +7234,9 @@ WandExport MagickBooleanType MogrifyImageList(ImageInfo *image_info, MagickStatusType status; + PixelInterpolateMethod + interpolate_method; + QuantizeInfo *quantize_info; @@ -7247,6 +7260,7 @@ WandExport MagickBooleanType MogrifyImageList(ImageInfo *image_info, (*images)->filename); if ((argc <= 0) || (*argv == (char *) NULL)) return(MagickTrue); + interpolate_method=UndefinedInterpolatePixel; mogrify_info=CloneImageInfo(image_info); quantize_info=AcquireQuantizeInfo(mogrify_info); status=MagickTrue; @@ -7347,7 +7361,7 @@ WandExport MagickBooleanType MogrifyImageList(ImageInfo *image_info, status=MagickFalse; break; } - (void) ClutImage(image,clut_image,image->interpolate,exception); + (void) ClutImage(image,clut_image,interpolate_method,exception); clut_image=DestroyImage(clut_image); *images=DestroyImageList(*images); *images=image; @@ -7426,8 +7440,8 @@ WandExport MagickBooleanType MogrifyImageList(ImageInfo *image_info, { /* Set a blending mask for the composition. + Posible error, what if image->mask already set. */ - /* POSIBLE ERROR; what if image->mask already set */ image->mask=mask_image; (void) NegateImage(image->mask,MagickFalse,exception); } @@ -7442,29 +7456,6 @@ WandExport MagickBooleanType MogrifyImageList(ImageInfo *image_info, *images=image; break; } -#if 0 -This has been merged completely into MogrifyImage() - if (LocaleCompare("crop",option+1) == 0) - { - MagickStatusType - flags; - - RectangleInfo - geometry; - - /* - Crop Image. - */ - (void) SyncImagesSettings(mogrify_info,*images); - flags=ParseGravityGeometry(*images,argv[i+1],&geometry,exception); - if (((geometry.width == 0) && (geometry.height == 0)) || - ((flags & XValue) != 0) || ((flags & YValue) != 0)) - break; - (void) TransformImages(images,argv[i+1],(char *) NULL); - InheritException(exception,&(*images)->exception); - break; - } -#endif break; } case 'd': @@ -7547,8 +7538,8 @@ This has been merged completely into MogrifyImage() op; (void) SyncImageSettings(mogrify_info,*images); - op=(MagickEvaluateOperator) ParseCommandOption(MagickEvaluateOptions, - MagickFalse,argv[i+1]); + op=(MagickEvaluateOperator) ParseCommandOption( + MagickEvaluateOptions,MagickFalse,argv[i+1]); evaluate_image=EvaluateImages(*images,op,exception); if (evaluate_image == (Image *) NULL) { @@ -7703,6 +7694,12 @@ This has been merged completely into MogrifyImage() *images=GetFirstImageInList(q); break; } + if (LocaleCompare("interpolate",option+1) == 0) + { + interpolate_method=(PixelInterpolateMethod) ParseCommandOption( + MagickInterpolateOptions,MagickFalse,argv[i+1]); + break; + } break; } case 'l': diff --git a/MagickWand/pixel-wand.c b/MagickWand/pixel-wand.c index 7e81186fc..2f1140dfa 100644 --- a/MagickWand/pixel-wand.c +++ b/MagickWand/pixel-wand.c @@ -1267,6 +1267,37 @@ WandExport Quantum PixelGetOpacityQuantum(const PixelWand *wand) % % % % % % +% P i x e l G e t P i x e l % +% % +% % +% % +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +% +% PixelGetPixel() returns the pixel wand pixel. +% +% The format of the PixelGetPixel method is: +% +% PixelInfo PixelGetPixel(const PixelWand *wand) +% +% A description of each parameter follows: +% +% o wand: the pixel wand. +% +*/ +WandExport PixelInfo PixelGetPixel(const PixelWand *wand) +{ + assert(wand != (const PixelWand *) NULL); + assert(wand->signature == WandSignature); + if (wand->debug != MagickFalse) + (void) LogMagickEvent(WandEvent,GetMagickModule(),"%s",wand->name); + return(wand->pixel); +} + +/* +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +% % +% % +% % % P i x e l G e t Q u a n t u m P a c k e t % % % % % diff --git a/MagickWand/pixel-wand.h b/MagickWand/pixel-wand.h index 74e7a6fc9..bee5351d0 100644 --- a/MagickWand/pixel-wand.h +++ b/MagickWand/pixel-wand.h @@ -51,6 +51,9 @@ extern WandExport MagickBooleanType PixelClearException(PixelWand *), PixelSetColor(PixelWand *,const char *); +extern WandExport PixelInfo + PixelGetPixel(const PixelWand *); + extern WandExport PixelWand *ClonePixelWand(const PixelWand *), **ClonePixelWands(const PixelWand **,const size_t), diff --git a/PerlMagick/Magick.xs b/PerlMagick/Magick.xs index a91a303f0..4577677f3 100644 --- a/PerlMagick/Magick.xs +++ b/PerlMagick/Magick.xs @@ -9681,16 +9681,16 @@ Mogrify(ref,...) } case 85: /* Tint */ { - PixelPacket - target; + PixelInfo + tint; - (void) GetOneVirtualPixel(image,0,0,&target,exception); + GetPixelInfo(image,&tint); if (attribute_flag[0] != 0) - (void) QueryColorDatabase(argument_list[0].string_reference,&target, + (void) QueryMagickColor(argument_list[0].string_reference,&tint, exception); if (attribute_flag[1] == 0) argument_list[1].string_reference="100"; - image=TintImage(image,argument_list[1].string_reference,target, + image=TintImage(image,argument_list[1].string_reference,&tint, exception); break; } diff --git a/PerlMagick/demo/demo.pl b/PerlMagick/demo/demo.pl index feaa8feb7..0ae8fc3b0 100644 --- a/PerlMagick/demo/demo.pl +++ b/PerlMagick/demo/demo.pl @@ -434,6 +434,12 @@ $example->Label('Swirl'); $example->Swirl(90); push(@$images,$example); +print "Tint...\n"; +$example=$model->Clone(); +$example->Label('Tint'); +$example->Tint('wheat'); +push(@$images,$example); + print "Unsharp Mask...\n"; $example=$model->Clone(); $example->Label('Unsharp Mask'); -- 2.40.0