Only draw each polygon pixel once#4333
Merged
hugovk merged 1 commit intopython-pillow:masterfrom Feb 15, 2020
Merged
Conversation
Member
|
Thanks! |
Merged
radarhere
added a commit
to radarhere/Pillow
that referenced
this pull request
Nov 15, 2021
…s to no longer be polygons
This was referenced May 5, 2022
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
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.
Helps #4277
When Pillow draws an ellipse, it considers it to be a 360-sided shape. Expressing that within an ordinary width and height means that those edges overlap.
In such a situation, the
polygon_genericfunction will draw pixels more than once. This is usually unnoticed, since a solid pixel on top of another solid pixel is still just a solid pixel. However, if the pixels drawn have a partial opacity, then repeated drawing of a pixel changes the final opacity.As background, the
polygon_genericfunction uses a scanline algorithm, drawing each row in turn,. Within each row, it starts drawing a line at the edge of a polygon, stops at the next edge, starts at the following edge, and so on.This PR updates the function to only draw each pixel once.