From 29242cfab91fbdc4336d2d37a1c0512e07bb2a68 Mon Sep 17 00:00:00 2001 From: Pierre Joye Date: Sat, 4 Nov 2006 14:27:07 +0000 Subject: [PATCH] - MFH: optimize horizontal and vertical lines --- NEWS | 1 + ext/gd/libgd/gd.c | 26 ++++++++++++++++++++++++++ 2 files changed, 27 insertions(+) diff --git a/NEWS b/NEWS index 000c684844..ad77ba88d0 100644 --- 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()). diff --git a/ext/gd/libgd/gd.c b/ext/gd/libgd/gd.c index bd6c984614..1d8de43615 100644 --- a/ext/gd/libgd/gd.c +++ b/ext/gd/libgd/gd.c @@ -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; -- 2.40.0