(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);
}
% 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:
%
%
*/
MagickExport Image *TintImage(const Image *image,const char *opacity,
- const PixelPacket tint,ExceptionInfo *exception)
+ const PixelInfo *tint,ExceptionInfo *exception)
{
#define TintImageTag "Tint/Image"
MagickOffsetType
progress;
+ MagickRealType
+ intensity;
+
PixelInfo
color_vector,
pixel;
/*
Determine RGB values of the color.
*/
+ GetPixelInfo(image,&pixel);
flags=ParseGeometry(opacity,&geometry_info);
pixel.red=geometry_info.rho;
if ((flags & SigmaValue) != 0)
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.
*/
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);
}
*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,
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))
{
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)
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*
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)
}
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));
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))
{
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);
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);
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;
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))
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);
Image
*tint_image;
- PixelPacket
+ PixelInfo
target;
assert(wand != (MagickWand *) NULL);
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);
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)
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)
MagickStatusType
flags;
+ PixelInterpolateMethod
+ interpolate_method;
+
QuantizeInfo
*quantize_info;
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);
(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)
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 == '+')
(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 == ','))
angle=geometry_info.rho;
}
mogrify_image=PolaroidImage(*image,draw_info,angle,
- (*image)->interpolate,exception);
+ interpolate_method,exception);
break;
}
if (LocaleCompare("posterize",option+1) == 0)
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;
}
(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)
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)
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)
MagickStatusType
status;
+ PixelInterpolateMethod
+ interpolate_method;
+
QuantizeInfo
*quantize_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;
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;
{
/*
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);
}
*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':
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)
{
*images=GetFirstImageInList(q);
break;
}
+ if (LocaleCompare("interpolate",option+1) == 0)
+ {
+ interpolate_method=(PixelInterpolateMethod) ParseCommandOption(
+ MagickInterpolateOptions,MagickFalse,argv[i+1]);
+ break;
+ }
break;
}
case 'l':
% %
% %
% %
+% 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);
+}
+\f
+/*
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+% %
+% %
+% %
% P i x e l G e t Q u a n t u m P a c k e t %
% %
% %
PixelClearException(PixelWand *),
PixelSetColor(PixelWand *,const char *);
+extern WandExport PixelInfo
+ PixelGetPixel(const PixelWand *);
+
extern WandExport PixelWand
*ClonePixelWand(const PixelWand *),
**ClonePixelWands(const PixelWand **,const size_t),
}
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;
}
$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');