diff --git a/Tests/images/imagedraw_polygon_1px_high.png b/Tests/images/imagedraw_polygon_1px_high.png new file mode 100644 index 000000000..e06508a0a Binary files /dev/null and b/Tests/images/imagedraw_polygon_1px_high.png differ diff --git a/Tests/test_imagedraw.py b/Tests/test_imagedraw.py index 7ecec48d3..74b0b8ff3 100644 --- a/Tests/test_imagedraw.py +++ b/Tests/test_imagedraw.py @@ -531,6 +531,20 @@ def test_polygon_kite(): assert_image_equal(im, Image.open(expected)) +def test_polygon_1px_high(): + # Test drawing a 1px high polygon + # Arrange + im = Image.new("RGB", (3, 3)) + draw = ImageDraw.Draw(im) + expected = "Tests/images/imagedraw_polygon_1px_high.png" + + # Act + draw.polygon([(0, 1), (0, 1), (2, 1), (2, 1)], "#f00") + + # Assert + assert_image_equal(im, Image.open(expected)) + + def helper_rectangle(bbox): # Arrange im = Image.new("RGB", (W, H)) diff --git a/src/libImaging/Draw.c b/src/libImaging/Draw.c index 10aaae1f2..947d7f70f 100644 --- a/src/libImaging/Draw.c +++ b/src/libImaging/Draw.c @@ -489,15 +489,15 @@ polygon_generic(Imaging im, int n, Edge *e, int ink, int eofill, } for (i = 0; i < n; i++) { - if (e[i].ymin == e[i].ymax) { - continue; - } if (ymin > e[i].ymin) { ymin = e[i].ymin; } if (ymax < e[i].ymax) { ymax = e[i].ymax; } + if (e[i].ymin == e[i].ymax) { + continue; + } edge_table[edge_count++] = (e + i); } if (ymin < 0) {