fix(pdf): apply color filters when exporting to PDF on android - #718
Merged
farfromrefug merged 1 commit intoSep 10, 2026
Merged
farfromrefug merged 1 commit into
farfromrefug merged 1 commit into
Conversation
loadImage() applied the page's colorMatrix (grayscale, b/w, ...) by
building a Canvas backed by the same bitmap it then drew onto:
val canvas = android.graphics.Canvas(bmp)
canvas.drawBitmap(bmp, 0F, 0F, paint)
Source and destination bitmap being identical is undefined behavior
on Android and effectively drops the color filter, so exported PDFs
kept the original colors even when a page had grayscale/b&w applied
in the app (other adjustments like "improve" go through a different
path and were unaffected). Render into a separate bitmap instead.
Refs ossappscollective#695
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.
Summary
Exported PDFs kept the original page colors even when a color adjustment (grayscale, b&w, sepia, invert, polaroid, or a brightness/contrast tweak — anything that produces a non-null
colorMatrix) was applied in the app before exporting. Other adjustments like "improve" go through a different path and were unaffected. The linked issue reports it for grayscale/b&w specifically, but the bug is in the sharedcolorMatrixapplication, so it affects any filter/adjustment.loadImage()inPDFUtils.ktapplies the page's colorMatrix by building aCanvasbacked by the same bitmap it then draws onto:Source and destination bitmap being identical is undefined behavior on Android, so the color filter never reliably made it into the encoded output. Render into a separate bitmap instead and swap references.
Testing
Refs #695