Use mask in C when drawing wide polygon lines #8984
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
Resolves #8976
If we just drew thicker lines when creating a polygon, then since the centre of the line is the edge, half of each line would be drawn outside the filled polygon. To avoid this, #5694 introduced masking using the Python API.
Pillow/src/PIL/ImageDraw.py
Lines 361 to 383 in 5a04b95
However, #8976 finds this to be slow. So instead of
this PR
The first two commits simplify the existing code by removing
polygon
from the DRAW struct.Pillow/src/libImaging/Draw.c
Lines 640 to 645 in 5a04b95
This just means that
polygon_generic
can be used more directly, and the mask doesn't need to be passed through each different type of polygon function.