]> granicus.if.org Git - imagemagick/commitdiff
Support gradient:direction and gradient:angle defines
authorCristy <urban-warrior@imagemagick.org>
Sat, 17 Oct 2015 13:31:58 +0000 (09:31 -0400)
committerCristy <urban-warrior@imagemagick.org>
Sat, 17 Oct 2015 13:31:58 +0000 (09:31 -0400)
MagickCore/paint.c
MagickCore/quantize.c
config/configure.xml
configure
utilities/import.1

index d370fb78305637694dbeddb20cec011b54d11429..fc9b3c0e7f22c8973a45b80ffabd191a8fe3782b 100644 (file)
@@ -55,6 +55,7 @@
 #include "MagickCore/gem-private.h"
 #include "MagickCore/monitor.h"
 #include "MagickCore/monitor-private.h"
+#include "MagickCore/option.h"
 #include "MagickCore/paint.h"
 #include "MagickCore/pixel-accessor.h"
 #include "MagickCore/resource_.h"
@@ -408,6 +409,16 @@ MagickExport MagickBooleanType FloodfillPaintImage(Image *image,
 %
 */
 
+static inline double MagickRound(double x)
+{
+  /*
+    Round the fraction to nearest integer.
+  */
+  if ((x-floor(x)) < (ceil(x)-x))
+    return(floor(x));
+  return(ceil(x));
+}
+
 MagickExport MagickBooleanType GradientImage(Image *image,
   const GradientType type,const SpreadMethod method,const StopInfo *stops,
   const size_t number_stops,ExceptionInfo *exception)
@@ -418,18 +429,12 @@ MagickExport MagickBooleanType GradientImage(Image *image,
   DrawInfo
     *draw_info;
 
-  GeometryInfo
-    geometry_info;
-
   GradientInfo
     *gradient;
 
   MagickBooleanType
     status;
 
-  MagickStatusType
-    flags;
-
   /*
     Set gradient start-stop end points.
   */
@@ -449,18 +454,111 @@ MagickExport MagickBooleanType GradientImage(Image *image,
     (void) ParseAbsoluteGeometry(artifact,&gradient->bounding_box);
   gradient->gradient_vector.x2=(double) image->columns-1.0;
   gradient->gradient_vector.y2=(double) image->rows-1.0;
-  artifact=GetImageArtifact(image,"gradient:vector");
+  artifact=GetImageArtifact(image,"gradient:direction");
+  if (artifact != (const char *) NULL)
+    {
+      GravityType
+        direction;
+
+      direction=(GravityType) ParseCommandOption(MagickGravityOptions,
+        MagickFalse,artifact);
+      switch (direction)
+      {
+        case NorthWestGravity:
+        {
+          gradient->gradient_vector.x1=(double) image->columns-1.0;
+          gradient->gradient_vector.y1=(double) image->rows-1.0;
+          gradient->gradient_vector.x2=0.0;
+          gradient->gradient_vector.y2=0.0;
+          break;
+        }
+        case NorthGravity:
+        {
+          gradient->gradient_vector.x1=0.0;
+          gradient->gradient_vector.y1=(double) image->rows-1.0;
+          gradient->gradient_vector.x2=0.0;
+          gradient->gradient_vector.y2=0.0;
+          break;
+        }
+        case NorthEastGravity:
+        {
+          gradient->gradient_vector.x1=0.0;
+          gradient->gradient_vector.y1=(double) image->rows-1.0;
+          gradient->gradient_vector.x2=(double) image->columns-1.0;
+          gradient->gradient_vector.y2=0.0;
+          break;
+        }
+        case WestGravity:
+        {
+          gradient->gradient_vector.x1=(double) image->columns-1.0;
+          gradient->gradient_vector.y1=0.0;
+          gradient->gradient_vector.x2=0.0;
+          gradient->gradient_vector.y2=0.0;
+          break;
+        }
+        case EastGravity:
+        {
+          gradient->gradient_vector.x1=0.0;
+          gradient->gradient_vector.y1=0.0;
+          gradient->gradient_vector.x2=(double) image->columns-1.0;
+          gradient->gradient_vector.y2=0.0;
+          break;
+        }
+        case SouthWestGravity:
+        {
+          gradient->gradient_vector.x1=(double) image->columns-1.0;
+          gradient->gradient_vector.y1=0.0;
+          gradient->gradient_vector.x2=0.0;
+          gradient->gradient_vector.y2=(double) image->rows-1.0;
+          break;
+        }
+        case SouthGravity:
+        {
+          gradient->gradient_vector.x1=0.0;
+          gradient->gradient_vector.y1=0.0;
+          gradient->gradient_vector.x2=0.0;
+          gradient->gradient_vector.y2=(double) image->columns-1.0;
+          break;
+        }
+        case SouthEastGravity:
+        {
+          gradient->gradient_vector.x1=0.0;
+          gradient->gradient_vector.y1=0.0;
+          gradient->gradient_vector.x2=(double) image->columns-1.0;
+          gradient->gradient_vector.y2=(double) image->rows-1.0;
+          break;
+        }
+        default:
+          break;
+      }
+    }
+  artifact=GetImageArtifact(image,"gradient:angle");
   if (artifact != (const char *) NULL)
     {
-      flags=ParseGeometry(artifact,&geometry_info);
-      gradient->gradient_vector.x1=geometry_info.rho;
-      if ((flags & SigmaValue) != 0)
-        gradient->gradient_vector.y1=geometry_info.sigma;
-      if ((flags & XiValue) != 0)
-        gradient->gradient_vector.x2=geometry_info.xi;
-      if ((flags & PsiValue) != 0)
-        gradient->gradient_vector.y2=geometry_info.psi;
+      double
+        angle,
+        cosine,
+        distance,
+        sine;
+
+      angle=StringToDouble(artifact,(char **) NULL);
+      cosine=cos(MagickPI*angle/180.0);
+      sine=sin(MagickPI*angle/180.0);
+      distance=fabs(sine*image->columns)+fabs(cosine*image->rows);
+      gradient->gradient_vector.x1=MagickRound(0.5*(image->columns-cosine*
+        distance));
+      gradient->gradient_vector.y1=MagickRound(0.5*(image->rows-sine*
+        distance));
+      gradient->gradient_vector.x2=MagickRound(0.5*(image->columns+cosine*
+        distance));
+      gradient->gradient_vector.y2=MagickRound(0.5*(image->rows+sine*
+        distance));
     }
+  artifact=GetImageArtifact(image,"gradient:vector");
+  if (artifact != (const char *) NULL)
+    (void) sscanf(artifact,"%lf%*[ ,]%lf%*[ ,]%lf%*[ ,]%lf",
+      &gradient->gradient_vector.x1,&gradient->gradient_vector.y1,
+      &gradient->gradient_vector.x2,&gradient->gradient_vector.y2);
   else
     if ((type == LinearGradient) && (gradient->gradient_vector.y2 != 0.0))
       gradient->gradient_vector.x2=0.0;
@@ -468,12 +566,8 @@ MagickExport MagickBooleanType GradientImage(Image *image,
   gradient->center.y=(double) gradient->gradient_vector.y2/2.0;
   artifact=GetImageArtifact(image,"gradient:center");
   if (artifact != (const char *) NULL)
-    {
-      flags=ParseGeometry(artifact,&geometry_info);
-      gradient->center.x=geometry_info.rho;
-      if ((flags & SigmaValue) != 0)
-        gradient->center.y=geometry_info.sigma;
-    }
+    (void) sscanf(artifact,"%lf%*[ ,]%lf",&gradient->center.x,
+      &gradient->center.y);
   gradient->radius=MagickMax(gradient->center.x,gradient->center.y);
   artifact=GetImageArtifact(image,"gradient:radius");
   if (artifact != (const char *) NULL)
index a572c2ee255ebf62f9454bdbe5dc00eec471cd4f..0bd90d93ca53d95aab02ca9bd9ac27d236918f49 100644 (file)
@@ -1140,7 +1140,7 @@ static void ClosestColor(const Image *image,CubeInfo *cube_info,
               distance+=pixel*pixel;
               if (distance <= cube_info->distance)
                 {
-                  pixel=alpha-beta;
+                  pixel=p->alpha-q->beta;
                   distance+=pixel*pixel;
                   if (distance <= cube_info->distance)
                     {
index db9c5437c05e162280fc87519f79f0f446f1037d..d7ec58f7b3e8f85fd4a673454b29da871deeb4a4 100644 (file)
   <configure name="PCFLAGS" value="-fopenmp -DMAGICKCORE_HDRI_ENABLE=1 -DMAGICKCORE_QUANTUM_DEPTH=16"/>
   <configure name="PREFIX" value="/usr/local"/>
   <configure name="QuantumDepth" value="16"/>
-  <configure name="RELEASE_DATE" value="2015-09-19"/>
+  <configure name="RELEASE_DATE" value="2015-10-17"/>
   <configure name="SHAREARCH_PATH" value="/usr/local/lib/ImageMagick-7.0.0/config-Q16HDRI"/>
   <configure name="SHARE_PATH" value="/usr/local/share/ImageMagick-7"/>
-  <configure name="GIT_REVISION" value="16969:130def2:20150919" />
+  <configure name="GIT_REVISION" value="17086:5b747d9:20151017" />
   <configure name="TARGET_CPU" value="x86_64"/>
   <configure name="TARGET_OS" value="linux-gnu"/>
   <configure name="TARGET_VENDOR" value="unknown"/>
index 1568116240bf578cd7cb5fbdf8cff8866f6df862..c8ac326fd6cdd8cda26998a00f1bcb96c1f7f855 100755 (executable)
--- a/configure
+++ b/configure
@@ -4379,7 +4379,7 @@ MAGICK_PATCHLEVEL_VERSION=0
 
 MAGICK_VERSION=7.0.0-0
 
-MAGICK_GIT_REVISION=17004:1787358:20150926
+MAGICK_GIT_REVISION=17086:5b747d9:20151017
 
 
 # Substitute library versioning
index e7394f10743e09cadc5a37aedbbb2720de2a6411..c2db70332dfc81d2b421b48809955efc4e29efb4 100644 (file)
@@ -90,7 +90,7 @@ Miscellaneous Options:
   \-list type           print a list of supported option arguments
   \-version             print version information
 
-By default, 'file' is written in the MIFF image format.  To specify a particular image format, precede the filename with an image format name and a colon (i.e. ps:image) or specify the image type as the filename suffix (i.e. image.ps).  Specify 'file' as '-' for standard input or output.
+By default, 'file' is written in the Postscript image format.  To specify a particular image format, precede the filename with an image format name and a colon (i.e. ps:image) or specify the image type as the filename suffix (i.e. image.ps).  Specify 'file' as '-' for standard input or output.
 .SH SEE ALSO
 ImageMagick(1)