v.y=(double) y-gradient->center.y;
return(sqrt(v.x*v.x+v.y*v.y));
}
- v.x=(double) (x-gradient->center.x)/gradient->radii.x;
- v.y=(double) (y-gradient->center.y)/gradient->radii.y;
+ v.x=(double) (x-gradient->center.x*
+ cos(DegreesToRadians(gradient->angle)))/gradient->radii.x;
+ v.y=(double) (y-gradient->center.y*
+ sin(DegreesToRadians(gradient->angle))/gradient->radii.y;
return(sqrt(v.x*v.x+v.y*v.y));
}
}
sine;
angle=StringToDouble(artifact,(char **) NULL);
- cosine=cos(MagickPI*angle/180.0);
- sine=sin(MagickPI*angle/180.0);
+ cosine=cos(DegreesToRadians(angle));
+ sine=sin(DegreesToRadians(angle));
distance=fabs(sine*image->columns)+fabs(cosine*image->rows);
gradient->gradient_vector.x1=MagickRound(0.5*(image->columns-cosine*
distance));
(void) sscanf(artifact,"%lf%*[ ,]%lf%*[ ,]%lf%*[ ,]%lf",
&gradient->gradient_vector.x1,&gradient->gradient_vector.y1,
&gradient->gradient_vector.x2,&gradient->gradient_vector.y2);
- if ((GetImageArtifact(image,"gradient:direction") == (const char *) NULL) &&
- (GetImageArtifact(image,"gradient:angle") == (const char *) NULL) &&
+ if ((GetImageArtifact(image,"gradient:angle") == (const char *) NULL) &&
+ (GetImageArtifact(image,"gradient:direction") == (const char *) NULL) &&
+ (GetImageArtifact(image,"gradient:extent") == (const char *) NULL) &&
(GetImageArtifact(image,"gradient:vector") == (const char *) NULL))
if ((type == LinearGradient) && (gradient->gradient_vector.y2 != 0.0))
gradient->gradient_vector.x2=0.0;
if (artifact != (const char *) NULL)
(void) sscanf(artifact,"%lf%*[ ,]%lf",&gradient->radii.x,
&gradient->radii.y);
+ artifact=GetImageArtifact(image,"gradient:extent");
+ if (artifact != (const char *) NULL)
+ {
+ if (LocaleCompare(artifact,"Diagonal") == 0)
+ {
+ gradient->radii.x=(double) image->columns-1.0;
+ gradient->radii.y=(double) image->rows-1.0;
+ }
+ if (LocaleCompare(artifact,"Ellipse") == 0)
+ {
+ gradient->radii.x=gradient->center.x;
+ gradient->radii.y=gradient->center.y;
+ }
+ if (LocaleCompare(artifact,"Mininum") == 0)
+ {
+ gradient->radii.x=MagickMin(gradient->center.x,gradient->center.y);
+ gradient->radii.y=gradient->radii.x;
+ }
+ }
gradient->radius=MagickMax(gradient->radii.x,gradient->radii.y);
gradient->spread=method;
/*