Pre-scaling (critical fix):
- Add pre-scaling to fit display dimensions (480x800) before dithering
to prevent post-downsampling artifacts that destroy dithering patterns
- Use fixed-point (16.16) math for sub-pixel accurate scaling
- Implement area averaging for smooth downsampling
Dithering improvements:
- Add Atkinson dithering (75% error diffusion) for cleaner results
- Add Floyd-Steinberg dithering option with serpentine scanning
- Keep clustered-dot halftone and Bayer as compile-time options
Image adjustments:
- Add brightness, contrast, and gamma adjustments for better visibility
- Adjust RGB to grayscale conversion (25-50-25) to reduce blue darkness
Other changes:
- Fix MCU block indexing bug for correct picojpeg buffer access
- Pre-generate cover BMP when EPUB is loaded for faster sleep screen
Replace simple threshold-based grayscale quantization with ordered
dithering using a 4x4 Bayer matrix. This eliminates color banding
artifacts and produces smoother gradients on e-ink display.
- Add 4x4 Bayer dithering matrix for 16-level threshold patterns
- Modify grayscaleTo2Bit() to use pixel position for dithering
- Simulates smooth grayscale transitions in BW mode without flicker
## Summary
- Add basic JPG image support
- Map JPG back to 2-bit BMP output
- Can be used to later render the BMP file from disk or directly pass to
output if wanted
- Give the 3 passes over the data needed to render grayscale content,
putting it on disk is preferred to outputting it multiple times
## Additional Context
- WIP, looking forward to BMP support from
https://github.com/daveallie/crosspoint-reader/pull/16
- Addresses some of #11