pajoye Sat Feb 8 03:41:43 2003 EDT
Modified files:
/php4/ext/gd/libgd gd.c gd.h
Log:
Add gdImageEllipse
Replace gdImageFilledEllipse by a new function (backported from
the new phpgd)
the new gdImageFilledEllipse fix bug bug #22103 (ellipse part)
Index: php4/ext/gd/libgd/gd.c
diff -u php4/ext/gd/libgd/gd.c:1.44 php4/ext/gd/libgd/gd.c:1.45
--- php4/ext/gd/libgd/gd.c:1.44 Sat Feb 1 20:34:54 2003
+++ php4/ext/gd/libgd/gd.c Sat Feb 8 03:41:42 2003
@@ -1534,7 +1534,11 @@
void
gdImageArc (gdImagePtr im, int cx, int cy, int w, int h, int s, int e, int color)
{
- gdImageFilledArc (im, cx, cy, w, h, s, e, color, gdNoFill);
+ if( (s%360)==(e%360) ){
+ gdImageEllipse(im, cx, cy, w, h, color);
+ } else {
+ gdImageFilledArc (im, cx, cy, w, h, s, e, color, gdNoFill);
+ }
}
void
@@ -1620,10 +1624,103 @@
}
}
-void
-gdImageFilledEllipse (gdImagePtr im, int cx, int cy, int w, int h, int color)
+
+/**
+ * Integer Ellipse functions (gdImageEllipse and gdImageFilledEllipse)
+ * Function added by Pierre-Alain Joye 02/08/2003 ([EMAIL PROTECTED])
+ * See the ellipse function simplification for the equation
+ * as well as the midpoint algorithm.
+ */
+
+void gdImageEllipse(gdImagePtr im, int mx, int my, int w, int h, int c)
{
- gdImageFilledArc (im, cx, cy, w, h, 0, 360, color, gdPie);
+ int x=0,mx1=0,mx2=0,my1=0,my2=0;
+ long aq,bq,dx,dy,r,rx,ry,a,b;
+
+ a=w>>1;
+ b=h>>1;
+ gdImageSetPixel(im,mx+a, my, c);
+ gdImageSetPixel(im,mx-a, my, c);
+ mx1 = mx-a;my1 = my;
+ mx2 = mx+a;my2 = my;
+
+ aq = a * a;
+ bq = b * b;
+ dx = aq << 1;
+ dy = bq << 1;
+ r = a * bq;
+ rx = r << 1;
+ ry = 0;
+ x = a;
+ while (x > 0){
+ if (r > 0) {
+ my1++;my2--;
+ ry +=dx;
+ r -=ry;
+ }
+ if (r <= 0){
+ x--;
+ mx1++;mx2--;
+ rx -=dy;
+ r +=rx;
+ }
+ gdImageSetPixel(im,mx1, my1, c);
+ gdImageSetPixel(im,mx1, my2, c);
+ gdImageSetPixel(im,mx2, my1, c);
+ gdImageSetPixel(im,mx2, my2, c);
+ }
+}
+
+void gdImageFilledEllipse (gdImagePtr im, int mx, int my, int w, int h, int c)
+{
+ int x=0,mx1=0,mx2=0,my1=0,my2=0;
+ long aq,bq,dx,dy,r,rx,ry,a,b;
+ int i;
+ int old_y1,old_y2;
+
+ a=w>>1;
+ b=h>>1;
+
+ gdImageLine(im, mx-a, my, mx+a, my, c);
+
+ mx1 = mx-a;my1 = my;
+ mx2 = mx+a;my2 = my;
+
+ aq = a * a;
+ bq = b * b;
+ dx = aq << 1;
+ dy = bq << 1;
+ r = a * bq;
+ rx = r << 1;
+ ry = 0;
+ x = a;
+ old_y2=-1;
+ old_y1=-1;
+ while (x > 0){
+ if (r > 0) {
+ my1++;my2--;
+ ry +=dx;
+ r -=ry;
+ }
+ if (r <= 0){
+ x--;
+ mx1++;mx2--;
+ rx -=dy;
+ r +=rx;
+ }
+ if(old_y2!=my2){
+ for(i=mx1;i<=mx2;i++){
+ gdImageSetPixel(im,i,my1,c);
+ }
+ }
+ if(old_y2!=my2){
+ for(i=mx1;i<=mx2;i++){
+ gdImageSetPixel(im,i,my2,c);
+ }
+ }
+ old_y2 = my2;
+ old_y1 = my1;
+ }
}
void
Index: php4/ext/gd/libgd/gd.h
diff -u php4/ext/gd/libgd/gd.h:1.14 php4/ext/gd/libgd/gd.h:1.15
--- php4/ext/gd/libgd/gd.h:1.14 Fri Jan 17 13:34:07 2003
+++ php4/ext/gd/libgd/gd.h Sat Feb 8 03:41:43 2003
@@ -420,7 +420,7 @@
/* Best to free this memory with gdFree(), not free() */
void* gdImageGd2Ptr(gdImagePtr im, int cs, int fmt, int *size);
-void gdImageEllipse(gdImagePtr im, int cx, int cy, int w, int h, int color);
+void gdImageEllipse(gdImagePtr im, int cx, int cy, int w, int h, int c);
/* Style is a bitwise OR ( | operator ) of these.
gdArc and gdChord are mutually exclusive;
--
PHP CVS Mailing List (http://www.php.net/)
To unsubscribe, visit: http://www.php.net/unsub.php