-
-
Notifications
You must be signed in to change notification settings - Fork 1.2k
Optimize QRCoder.GetGraphic performance #658
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Conversation
…mprove performance with GraphicsPath
📝 WalkthroughWalkthroughRefactors QR code rendering in QRCoder/QRCode.cs to build and fill a single GraphicsPath of dark modules using row-wise run-length encoding, adds explicit background fill and compositing mode switches, and defers icon drawing until after module rendering. Introduces CreatePathFromModules helper for path construction with quiet-zone offsets. Changes
Sequence Diagram(s)sequenceDiagram
autonumber
participant QR as QRCode.Render
participant G as Graphics
participant P as GraphicsPath
participant I as Icon/Image (optional)
QR->>G: Create bitmap/graphics
QR->>G: Set CompositingMode=SourceCopy
QR->>G: Fill background (light modules)
QR->>QR: CreatePathFromModules(matrix, pixelsPerModule, quietZone)
QR->>P: Build path via row-wise RLE rectangles
QR->>G: FillPath(P) for dark modules
alt Icon specified
QR->>G: Set CompositingMode=SourceOver
QR->>G: Draw icon centered
end
Estimated code review effort🎯 3 (Moderate) | ⏱️ ~25 minutes Possibly related PRs
Suggested reviewers
Pre-merge checks and finishing touches✅ Passed checks (3 passed)
✨ Finishing touches
🧪 Generate unit tests (beta)
📜 Recent review detailsConfiguration used: CodeRabbit UI Review profile: CHILL Plan: Pro 📒 Files selected for processing (1)
🧰 Additional context used🧬 Code graph analysis (1)QRCoder/QRCode.cs (3)
⏰ Context from checks skipped due to timeout of 90000ms. You can increase the timeout in your CodeRabbit configuration to a maximum of 15 minutes (900000ms). (5)
🔇 Additional comments (5)
Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out. Comment |
Continues efforts by @TimothyMakkison in #626 . This PR draws from other recent optimizations, where it creates a path and then fills the path at once.
Before
After
Summary by CodeRabbit
Bug Fixes
Refactor