diff --git a/Tests/images/imagedraw_polygon_1px_high_translucent.png b/Tests/images/imagedraw_polygon_1px_high_translucent.png new file mode 100644 index 00000000000..8bbf9397c72 Binary files /dev/null and b/Tests/images/imagedraw_polygon_1px_high_translucent.png differ diff --git a/Tests/test_imagedraw.py b/Tests/test_imagedraw.py index 6755d94b895..7f4a18c47bf 100644 --- a/Tests/test_imagedraw.py +++ b/Tests/test_imagedraw.py @@ -655,6 +655,20 @@ def test_polygon_1px_high(): assert_image_equal_tofile(im, expected) +def test_polygon_1px_high_translucent(): + # Test drawing a translucent 1px high polygon + # Arrange + im = Image.new("RGB", (4, 3)) + draw = ImageDraw.Draw(im, "RGBA") + expected = "Tests/images/imagedraw_polygon_1px_high_translucent.png" + + # Act + draw.polygon([(1, 1), (1, 1), (3, 1), (3, 1)], (255, 0, 0, 127)) + + # Assert + assert_image_equal_tofile(im, expected) + + def test_polygon_translucent(): # Arrange im = Image.new("RGB", (W, H)) diff --git a/src/libImaging/Draw.c b/src/libImaging/Draw.c index 86cd6c3a058..df99a59b8f0 100644 --- a/src/libImaging/Draw.c +++ b/src/libImaging/Draw.c @@ -419,7 +419,7 @@ draw_horizontal_lines( if (e[i].ymin == y && e[i].ymin == e[i].ymax) { int xmax; int xmin = e[i].xmin; - if (*x_pos < xmin) { + if (*x_pos != -1 && *x_pos < xmin) { // Line would be after the current position continue; } @@ -540,7 +540,7 @@ polygon_generic(Imaging im, int n, Edge *e, int ink, int eofill, hline_handler h } qsort(xx, j, sizeof(float), x_cmp); if (hasAlpha == 1) { - int x_pos = 0; + int x_pos = -1; for (i = 1; i < j; i += 2) { int x_end = ROUND_DOWN(xx[i]); if (x_end < x_pos) {