From: Cristy Date: Mon, 19 Oct 2015 12:33:32 +0000 (-0400) Subject: Add support for gradient:extent define X-Git-Tag: 7.0.1-0~544 X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=f70f909b81f1b22be16a68856e56a975bd4c5454;p=imagemagick Add support for gradient:extent define --- diff --git a/MagickCore/draw.c b/MagickCore/draw.c index 56c6e642e..b52b03da7 100644 --- a/MagickCore/draw.c +++ b/MagickCore/draw.c @@ -3245,8 +3245,10 @@ static inline double GetStopColorOffset(const GradientInfo *gradient, 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)); } } diff --git a/MagickCore/paint.c b/MagickCore/paint.c index 1d0ac0136..a3476fb92 100644 --- a/MagickCore/paint.c +++ b/MagickCore/paint.c @@ -539,8 +539,8 @@ MagickExport MagickBooleanType GradientImage(Image *image, 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)); @@ -556,8 +556,9 @@ MagickExport MagickBooleanType GradientImage(Image *image, (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; @@ -573,6 +574,25 @@ MagickExport MagickBooleanType GradientImage(Image *image, 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; /*