Files
ws2/docs/streaming.md
2026-01-25 15:14:15 +08:00

85 lines
3.1 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
### 各工具的区别与用途
1. **font2bitmap.py**
- 用途将TrueType字体转换为等宽或比例位图字体模块
- 输入TrueType字体文件.ttf/.otf
- 输出Python字体模块如proverbs_font.py
- 特点:
- 支持比例字体(字符宽度可变)
- 支持CJK字符和Unicode
- 生成4个数据结构MAP、_WIDTHS、_OFFSETS、_BITMAPS
- 使用方式:`display.write(font_module, "Hello", x, y, color)`
2. **monofont2bitmap.py**
- 用途将等宽TrueType字体转换为位图字体模块
- 输入TrueType字体文件.ttf/.otf
- 输出Python字体模块如inconsolata_32.py
- 特点:
- 固定宽度字符
- 简单数据结构HEIGHT、WIDTH、_BITMAP
- 支持多色字体
- 使用方式:`display.bitmap(font_module, x, y, char_index)`
3. **font_from_romfont.py**
- 用途将ROM字体二进制文件转换为Python模块
- 输入:老旧计算机/游戏机的ROM字体数据
- 输出Python字体模块
- 特点:
- 保留复古计算机字体风格
- 通常8x8固定大小
- 使用方式:`display.bitmap(font_module, x, y, char_index)`
4. **imgtobitmap.py**
- 用途:将图像文件转换为位图模块
- 输入图像文件PNG、JPG等
- 输出Python图像模块
- 特点:
- 支持任何图像到位图的转换
- 支持1-8位/像素的颜色深度
- 生成调色板
- 使用方式:`display.bitmap(image_module, x, y, 0)`
### 哪个可以转成流式格式?
**所有这些工具的输出都可以转换为流式格式!**
我创建了相应的转换工具:
1. **font2bin.py**将font2bitmap.py生成的字体模块转换为二进制流式格式
2. **image2bin.py**将imgtobitmap.py生成的图像模块转换为二进制流式格式
**原理相同**
- Python模块在导入时加载全部数据到RAM
- 二进制文件可以按需读取,只加载需要的数据
- 针对ESP8266等内存受限设备特别有效
### 流式格式的优势
1. **font2bitmap.py → 流式格式**
- 节省93%内存6.4KB → ~400字节
- 适合大型字体特别是包含CJK字符的字体
- 保持与原有`st7789.write()`接口的兼容性
2. **imgtobitmap.py → 流式格式**
- 适合大型图像或动画
- 支持动态帧加载StreamingAnimation类
- 可以存储在文件系统而不是RAM中
3. **monofont2bitmap.py → 流式格式**
- 简单结构使流式加载更容易
- 虽然已经很紧凑,但在极小内存环境中仍有价值
4. **font_from_romfont.py → 流式格式**
- 超简单结构,流式实现非常直接
- 对于大批量老旧字体集合有意义
### 实际应用建议
对于ESP8266等内存受限设备
1. 使用`font2bin.py`将大型字体转换为流式格式
2. 使用`image2bin.py`将大型图像或动画帧转换为流式格式
3. 使用`streaming_font.py``streaming_image.py`加载和显示
4. 这样可以在保持功能的同时,最大限度地减少内存使用
这种流式方式使得ESP8266等设备可以显示大型字体和图像而不会因内存不足而失效。