]> granicus.if.org Git - php/commitdiff
- MFH: optimize horizontal and vertical lines
authorPierre Joye <pajoye@php.net>
Sat, 4 Nov 2006 14:27:07 +0000 (14:27 +0000)
committerPierre Joye <pajoye@php.net>
Sat, 4 Nov 2006 14:27:07 +0000 (14:27 +0000)
NEWS
ext/gd/libgd/gd.c

diff --git a/NEWS b/NEWS
index 000c6848445040666487c657fabcec039b4b8554..ad77ba88d0b3bc91a4266265d9f0603de34fc579 100644 (file)
--- a/NEWS
+++ b/NEWS
@@ -11,6 +11,7 @@ PHP                                                                        NEWS
   . Make sure PHP_SELF is filtered in Apache 1 sapi.
   . Fixed bug #39358 (INSTALL_HEADERS contains incorrect reference to
     php_filter.h).
+- Added optimization for imageline with horizontal and vertial lines (Pierre)
 - Fixed bug #39366 (imagerotate does not use alpha with angle > 45°) (Pierre)
 - Fixed bug #39273 (imagecopyresized may ignore alpha channel) (Pierre)
 - Fixed bug #39364 (Removed warning on empty haystack inside mb_strstr()).
index bd6c9846147a35edfd620efafa8bcc312069f717..1d8de43615584fa78a9e017571068ce540bc000c 100644 (file)
@@ -1019,6 +1019,7 @@ void gdImageAABlend (gdImagePtr im)
 /* Bresenham as presented in Foley & Van Dam */
 void gdImageLine (gdImagePtr im, int x1, int y1, int x2, int y2, int color)
 {
+       int t;
        int dx, dy, incr1, incr2, d, x, y, xend, yend, xdirflag, ydirflag;
        int wid;
        int w, wstart;
@@ -1029,6 +1030,31 @@ void gdImageLine (gdImagePtr im, int x1, int y1, int x2, int y2, int color)
                return;
        }
 
+       /* Vertical */
+       if (x1==x2) {
+               if (y2 < y1) {
+                       t = y2;
+                       y2 = y1;
+                       y1 = t;
+               }
+
+               for (;y1 <= y2; y1++) {
+                       gdImageSetPixel(im, x1,y1, color);
+               }
+               return;
+       } else if (y1==y2) {    /* Horizontal */
+               if (x2 < x1) {
+                       t = x2;
+                       x2 = x1;
+                       x1 = t;
+               }
+
+               for (;x1 <= x2; x1++) {
+                       gdImageSetPixel(im, x1,y1, color);
+               }
+               return;
+       }
+
        /* gdAntiAliased passed as color: set anti-aliased line (AAL) global vars. */
        if (color == gdAntiAliased) {
                im->AAL_x1 = x1;