]> granicus.if.org Git - imagemagick/commitdiff
Bug fix and Addition to Variable Blur (blue hannel mapped ellipse angle)
authoranthony <anthony@git.imagemagick.org>
Fri, 25 Dec 2009 04:38:19 +0000 (04:38 +0000)
committeranthony <anthony@git.imagemagick.org>
Fri, 25 Dec 2009 04:38:19 +0000 (04:38 +0000)
ChangeLog
magick/composite.c

index f083f828bbb883cdd5d2134571c17e8bac175699..abfa2b85d8f06b8c1efaeddb5b6f672e6cb22139 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,9 @@
+
+2009-12-23  6.5.8-8 Anthony Thyssen <A.Thyssen@griffith...>
+  * angle bug fix in variable blur composition with vertical ellipses
+  * Added ability to have variable angles for ellipses in variable blur
+    composition.  See IM Examples, Composition, Variable Blur for details
+
 2009-12-20  6.5.8-8 Cristy  <quetzlzacatenango@image...>
   * JPEG does not grok the HSL colorspace.
 
index c4dec16f31a1f1b712178e65260ed474169e84a2..02cfbe94b1bf7f8b57b2d10d016a04c8088a3673 100644 (file)
@@ -1444,10 +1444,13 @@ MagickExport MagickBooleanType CompositeImageChannel(Image *image,
         pixel;
 
       MagickRealType
+        w, h,
         blur_xu,
         blur_xv,
         blur_yu,
-        blur_yv;
+        blur_yv,
+        angle_start,
+        angle_range;
 
       ResampleFilter
         *resample_filter;
@@ -1478,25 +1481,28 @@ MagickExport MagickBooleanType CompositeImageChannel(Image *image,
           destination_image=DestroyImage(destination_image);
           return(MagickFalse);
         }
-      blur_xu=geometry_info.rho;
-      blur_yv=geometry_info.sigma;
+      w=blur_xu=geometry_info.rho;
+      h=blur_yv=geometry_info.sigma;
       blur_xv=blur_yu = 0.0;
+      angle_start=0.0;
+      angle_range=0.0;
       if ((flags & HeightValue) == 0)
         blur_yv=blur_xu;
-      if ((flags & XValue) != 0)
+      if ((flags & XValue) != 0 )
         {
           MagickRealType
-            angle,
-            x,
-            y;
-
-          x=blur_xu;
-          y=blur_yv;
-          angle=DegreesToRadians(geometry_info.xi);
-          blur_xu=x*cos(angle);
-          blur_xv=x*sin(angle);
-          blur_yu=(-y*sin(angle));
-          blur_yu=y*cos(angle);
+            angle;
+
+          angle = DegreesToRadians(geometry_info.xi);
+          blur_xu = w*cos(angle);
+          blur_xv = w*sin(angle);
+          blur_yu = (-h*sin(angle));
+          blur_yv = h*cos(angle);
+        }
+      if ((flags & YValue) != 0 )
+        {
+          angle_start = DegreesToRadians(geometry_info.xi);
+          angle_range = DegreesToRadians(geometry_info.psi) - angle_start;
         }
       /*
         Blur Image by resampling;
@@ -1540,6 +1546,17 @@ MagickExport MagickBooleanType CompositeImageChannel(Image *image,
               p++;
               continue;
             }
+          if ( fabs(angle_range) > MagickEpsilon )
+            {
+              MagickRealType
+                angle;
+
+              angle = angle_start + angle_range*QuantumScale*p->blue;
+              blur_xu = w*cos(angle);
+              blur_xv = w*sin(angle);
+              blur_yu = (-h*sin(angle));
+              blur_yv = h*cos(angle);
+            }
           ScaleResampleFilter(resample_filter,blur_xu*QuantumScale*p->red,
             blur_yu*QuantumScale*p->green,blur_xv*QuantumScale*p->red,
             blur_yv*QuantumScale*p->green);