Add XTC/XTCH ebook format support (#135)
## Summary * **What is the goal of this PR?** Add support for XTC (XTeink X4 native) ebook format, which contains pre-rendered 480x800 1-bit bitmap pages optimized for e-ink displays. * **What changes are included?** - New `lib/Xtc/` library with XtcParser for reading XTC files - XtcReaderActivity for displaying XTC pages on e-ink display - XTC file detection in FileSelectionActivity - Cover BMP generation from first XTC page - Correct XTG page header structure (22 bytes) and bit polarity handling ## Additional Context - XTC files contain pre-rendered bitmap pages with embedded status bar (page numbers, progress %) - XTG page header: 22 bytes (magic + dimensions + reserved fields + bitmap size) - Bit polarity: 0 = black, 1 = white - No runtime text rendering needed - pages display directly on e-ink - Faster page display compared to EPUB since no parsing/rendering required - Memory efficient: loads one page at a time (48KB per page) - Tested with XTC files generated from https://x4converter.rho.sh/ - Verified correct page alignment and color rendering - Please report any issues if you test with XTC files from other sources. --------- Co-authored-by: Dave Allie <dave@daveallie.com>
This commit is contained in:
40
lib/Xtc/README
Normal file
40
lib/Xtc/README
Normal file
@@ -0,0 +1,40 @@
|
||||
# XTC/XTCH Library
|
||||
|
||||
XTC ebook format support for CrossPoint Reader.
|
||||
|
||||
## Supported Formats
|
||||
|
||||
| Format | Extension | Description |
|
||||
|--------|-----------|----------------------------------------------|
|
||||
| XTC | `.xtc` | Container with XTG pages (1-bit monochrome) |
|
||||
| XTCH | `.xtch` | Container with XTH pages (2-bit grayscale) |
|
||||
|
||||
## Format Overview
|
||||
|
||||
XTC/XTCH are container formats designed for ESP32 e-paper displays. They store pre-rendered bitmap pages optimized for the XTeink X4 e-reader (480x800 resolution).
|
||||
|
||||
### Container Structure (XTC/XTCH)
|
||||
|
||||
- 56-byte header with metadata offsets
|
||||
- Optional metadata (title, author, etc.)
|
||||
- Page index table (16 bytes per page)
|
||||
- Page data (XTG or XTH format)
|
||||
|
||||
### Page Formats
|
||||
|
||||
#### XTG (1-bit monochrome)
|
||||
|
||||
- Row-major storage, 8 pixels per byte
|
||||
- MSB first (bit 7 = leftmost pixel)
|
||||
- 0 = Black, 1 = White
|
||||
|
||||
#### XTH (2-bit grayscale)
|
||||
|
||||
- Two bit planes stored sequentially
|
||||
- Column-major order (right to left)
|
||||
- 8 vertical pixels per byte
|
||||
- Grayscale: 0=White, 1=Dark Grey, 2=Light Grey, 3=Black
|
||||
|
||||
## Reference
|
||||
|
||||
Original format info: <https://gist.github.com/CrazyCoder/b125f26d6987c0620058249f59f1327d>
|
||||
Reference in New Issue
Block a user