Source

gd-libgd / tests / gdimagefilledpolygon / bug00100.c

Full commit
tabe a52c979 










pierrejoye e20413b 


tabe a52c979 
Ondřej Surý 6cc113c 
pierrejoye e20413b 








tabe a52c979 
pierrejoye e20413b 

tabe a52c979 
pierrejoye e20413b 
tabe a52c979 
Ondřej Surý 6cc113c 
pierrejoye e20413b 














tabe a52c979 
Ondřej Surý 6cc113c 
pierrejoye e20413b 














tabe a52c979 
Ondřej Surý 6cc113c 
pierrejoye e20413b 














tabe a52c979 
Ondřej Surý 6cc113c 
pierrejoye e20413b 














tabe a52c979 
pierrejoye e20413b 











tabe a52c979 
pierrejoye e20413b 










tabe a52c979 
pierrejoye e20413b 










tabe a52c979 
Ondřej Surý 6cc113c 
pierrejoye e20413b 













tabe a52c979 
pierrejoye e20413b 



tabe a52c979 
#include <stdlib.h>
#include "gd.h"
#include "gdtest.h"

/* This is a quickie test program to show a bug in gd.
 * There is a red line that is drawn across the bottom of
 * the image that shouldn't be there.
 */
int
main(void)
{
	gdPoint pointy[5];
	gdPoint diamond[4];
	int d, x, y, top, bot, left, right, r;

	/*                              R    G    B */
	int white   = gdTrueColorAlpha(255, 255, 255, 10);
	int black   = gdTrueColorAlpha(  0,   0,   0, 10);
	int red     = gdTrueColorAlpha(255,   0,   0, 10);
	int green   = gdTrueColorAlpha(  0, 255,   0, 10);
	int blue    = gdTrueColorAlpha(  0,   0, 255, 10);
	int yellow  = gdTrueColorAlpha(255, 255,   0, 10);
	int cyan    = gdTrueColorAlpha(  0, 255, 255, 10);
	int magenta = gdTrueColorAlpha(255,   0, 255, 10);
	int purple  = gdTrueColorAlpha(100,   0, 100, 10);

	gdImagePtr im = gdImageCreateTrueColor(256, 256);
	if (!im) exit(EXIT_FAILURE);

	gdImageFilledRectangle(im, 0, 0, 256, 256, white);

	/* M (bridge) */
	top = 240;
	bot = 255;
	d = 30;
	x = 100;
	pointy[0].x = x;
	pointy[0].y = top;
	pointy[1].x = x+2*d;
	pointy[1].y = top;
	pointy[2].x = x+2*d;
	pointy[2].y = bot;
	pointy[3].x = x+d;
	pointy[3].y = (top+bot)/2;
	pointy[4].x = x;
	pointy[4].y = bot;
	gdImageFilledPolygon(im, pointy, 5, yellow);

	/* left-facing M not on baseline */
	top = 40;
	bot = 70;
	left = 120;
	right = 180;
	pointy[0].x = left;
	pointy[0].y = top;
	pointy[1].x = right;
	pointy[1].y = top;
	pointy[2].x = right;
	pointy[2].y = bot;
	pointy[3].x = left;
	pointy[3].y = bot;
	pointy[4].x = (left+right)/2;
	pointy[4].y = (top+bot)/2;
	gdImageFilledPolygon(im, pointy, 5, purple);

	/* left-facing M on baseline */
	top = 240;
	bot = 270;
	left = 20;
	right = 80;
	pointy[0].x = left;
	pointy[0].y = top;
	pointy[1].x = right;
	pointy[1].y = top;
	pointy[2].x = right;
	pointy[2].y = bot;
	pointy[3].x = left;
	pointy[3].y = bot;
	pointy[4].x = (left+right)/2;
	pointy[4].y = (top+bot)/2;
	gdImageFilledPolygon(im, pointy, 5, magenta);

	/* left-facing M on ceiling */
	top = -15;
	bot = 15;
	left = 20;
	right = 80;
	pointy[0].x = left;
	pointy[0].y = top;
	pointy[1].x = right;
	pointy[1].y = top;
	pointy[2].x = right;
	pointy[2].y = bot;
	pointy[3].x = left;
	pointy[3].y = bot;
	pointy[4].x = (left+right)/2;
	pointy[4].y = (top+bot)/2;
	gdImageFilledPolygon(im, pointy, 5, blue);

	d = 30;
	x = 150;
	y = 150;
	diamond[0].x = x-d;
	diamond[0].y = y;
	diamond[1].x = x;
	diamond[1].y = y+d;
	diamond[2].x = x+d;
	diamond[2].y = y;
	diamond[3].x = x;
	diamond[3].y = y-d;
	gdImageFilledPolygon(im, diamond, 4, green);

	x = 180;
	y = 225;
	diamond[0].x = x-d;
	diamond[0].y = y;
	diamond[1].x = x;
	diamond[1].y = y+d;
	diamond[2].x = x+d;
	diamond[2].y = y;
	diamond[3].x = x;
	diamond[3].y = y-d;
	gdImageFilledPolygon(im, diamond, 4, red);

	x = 225;
	y = 255;
	diamond[0].x = x-d;
	diamond[0].y = y;
	diamond[1].x = x;
	diamond[1].y = y+d;
	diamond[2].x = x+d;
	diamond[2].y = y;
	diamond[3].x = x;
	diamond[3].y = y-d;
	gdImageFilledPolygon(im, diamond, 4, cyan);

	/* M (bridge) not touching bottom boundary */
	top = 100;
	bot = 150;
	x = 30;
	pointy[0].x = x;
	pointy[0].y = top;
	pointy[1].x = x+2*d;
	pointy[1].y = top;
	pointy[2].x = x+2*d;
	pointy[2].y = bot;
	pointy[3].x = x+d;
	pointy[3].y = (top+bot)/2;
	pointy[4].x = x;
	pointy[4].y = bot;
	gdImageFilledPolygon(im, pointy, 5, black);

	r = gdAssertImageEqualsToFile(GDTEST_TOP_DIR "/gdimagefilledpolygon/bug00100.png", im);
	gdImageDestroy(im);
	if (!r) exit(EXIT_FAILURE);
	return EXIT_SUCCESS;
}