Mostrar fuente TrueType para Arduino
Lea TrueType (.ttf) de FS (ex. SD/SPIFFS/FATFS) y escriba FrameBuffer.
- Lea los archivos TrueType (formato 'CMAP').
- Escriba cualquier cadena en el FrameBuffer del usuario.
- Admite "glifos simples" y parte de "glifos compuestos".
- Establezca el tamaño de la fuente, la posición, el color, el espacio, gire.
- Cuerdas centradas y alineadas a la derecha. Obteniendo la longitud de la cadena.
- Lea la tabla 'kern' (format0) y kerning.
- Organice bellamente personajes basados en la tabla 'HMTX'.

Manual de referencia TrueType ™
https://developer.apple.com/fonts/truetype-reference-manual/
La biblioteca nativa para STM32 está aquí.
Código estándar
//TrueType class declaration
truetypeClass truetype = truetypeClass();
uint8_t *framebuffer;
void setup() {
//Prepare a frame buffer
framebuffer = (uint8_t *)calloc(sizeof(uint8_t), FRAMEBUFFER_SIZE);
//Read TrueType file
//Example in SPIFFS
//I think that SD, FATFS and other codes will be almost the same
SPIFFS.begin(true);
File fontFile = SPIFFS.open("/FONTFILE.ttf", "r");
//Set framebuffer array in TrueType class
//Pay attention to the format of the framebuffer
truetype.setFramebuffer(DISPLAY_WIDTH, DISPLAY_HEIGHT, 4, 0, framebuffer);
//Initial reading of ttf files
if (!truetype.setTtfFile(fontFile)) {
Serial.println("read ttf failed");
return;
}
//TrueType class string parameter settings
truetype.setCharacterSize(100);
truetype.setCharacterSpacing(0);
truetype.setTextBoundary(10, DISPLAY_WIDTH, DISPLAY_HEIGHT);
truetype.setTextColor(0x00, 0x00);
//Write a string to the framebuffer
truetype.textDraw(10, 10, "The quick brown fox jumps over the lazy dog");
//Export framebuffer to screen
FLASH_TO_SCREEN();
//end
truetype.end();
}
API
uint8_t setttffile (archivo _file, uint8_t _checkchecksum = 0);
- Establezca el archivo TTF leído de SD, Spiffs, FATFS, etc.
- Archivo _file: archivo TTF.
- Return: 1 = Leer exitoso, 0 = Leer falla.
void setframeBuffer (uint16_t _frameBufferWidth, uint16_t _frameBufferHeight, uint16_t _frameBuffer_Bit, uint8_t _frameBufferDirection, uint8_t *_frameBuffer);
- Configuración de FrameBuffer.
- uint16_t _frameBufferWidth: FrameBuffer Width.
- uint16_t _frameBufferHeight: FrameBuffer Eight.
- uint16_t _framebuffer_bit: el número de bits por píxel. (1,4,8 bits implementado)
- uint8_t _frameBufferDirection: orientación de bits.
- uint8_t *_FrameBuffer: FrameBuffer Pointer.
- Si desea que corresponda a su propio FrameBuffer, edite la función Addpixel. Si agrega código, ¡compártelo!
void setCharActerSpacing (int16_t _CharActerSpace, uint8_t _kerning = 1);
- Establecer el ancho entre los personajes.
- INT16_T _CharActerSpace: valor de ancho entre caracteres.
- uint8_t _kerning: lea y use la tabla TTF 'kern'. 1: 'Kern' + _CharacterSpace. 0: _CharacterSpace.
void setCharActerSize (uint16_t _CharActerSize);
- Configuración de tamaño de fuente.
- uint16_t _CharActerSize: Altura del personaje.
void setTextBoundary (uint16_t _start_x, uint16_t _end_x, uint16_t _end_y);
- Configuración del rango de cadenas.
- Los ejes de coordenadas giran con "setTexTrotation"
- uint16_t _start_x: el punto de partida x de la cadena de caracteres cuando se produce una ruptura de línea.
- uint16_t _end_x: el punto final x al romper una línea.
- uint16_t _end_y: el punto final y al romper una línea.
void setTextColor (uint8_t _online, uint8_t _inside);
- Configuración de color de texto.
- uint8_t _Online: Color de esquema del personaje.
- uint8_t _inside: color de relleno de texto.
void settexTrotation (uint8_t _rotation);
- Rotación de texto
- Gire junto con los ejes de coordenadas. La imagen es la siguiente imagen.

uint8_t _rotation: ángulo de rotación.
- (Rotate_0/Rotate_90/Rotate_180/Rotate_270)
void textDraw (uint16_t _x, uint16_t _y, const wchar_t _character []);
- Escribe una cadena al FrameBuffer.
- uint16_t _x: punto de inicio de cadena x.
- uint16_t _y: punto de inicio de cadena y.
- const wchar_t _character []: string puntero (carácter de doble byte).
void textDraw (uint16_t _x, uint16_t _y, const char _character []);
- Escribe una cadena al FrameBuffer.
- uint16_t _x: punto de inicio de cadena x.
- uint16_t _y: punto de inicio de cadena y.
- const char _character []: puntero de cadena (carácter de byte único).
void textDraw (uint16_t _x, uint16_t _y, const string _string);
- Escribe una cadena al FrameBuffer.
- uint16_t _x: punto de inicio de cadena x.
- uint16_t _y: punto de inicio de cadena y.
- const string _string: string pointer (tipo de cadena).
uint16_t getStringWidth (const warchar_t _character []);
- const wchar_t _character []: string puntero (carácter de doble byte).
- Regreso: la longitud de la cadena. No se consideran los descansos automáticos de línea.
- Se puede usar para el texto de texto del centro/derecha.
uint16_t getStringWidth (const char _character []);
- const char _character []: puntero de cadena (carácter de byte único).
- Regreso: la longitud de la cadena. No se consideran los descansos automáticos de línea.
- Se puede usar para el texto de texto del centro/derecha.
uint16_t getStringWidth (const string _string);
- const string _string: string pointer (tipo de cadena).
- Regreso: la longitud de la cadena. No se consideran los descansos automáticos de línea.
- Se puede usar para el texto de texto del centro/derecha.
End nulo ();
- Cerrar archivo de fuente.
Formato FrameBuffer
Orientación de bit al almacenar información para múltiples píxeles por byte del FrameBuffer.
Los tipos de Frambuffers se dividen ampliamente de acuerdo con esta dirección.
Actualmente compatible: Horizontal - 1,4,8 bits
Horizontal
Ejemplo con 1bit / 1pixel

Vertical
Ejemplo con 1bit / 1pixel

Originalidad
- Se solucionó el problema de que algunos archivos de fuentes no podían leerse.
- Manejo de curvas Bezier.
- Admite hasta el tercer orden curvas Bezier, pero el cuarto orden y arriba se dibujan como líneas rectas.
- El color del contorno y el color de relleno se pueden configurar individualmente.
- Admite la escritura para matrices. Las fuentes se dibujan en alguna forma de FrameBuffer (matriz uint8_t).
- Kerning leyendo la tabla 'Kern'.
- Lea la tabla 'HMTX' y ajuste el diseño.
- Proceso de llenado eficiente.
Trabajo futuro
TrueType
- Soporte completo para "glifos compuestos"
- Diversificación de formatos de FrameBuffer compatibles.
- Solo es compatible con el soporte para el formato 'CMAP' y el formato 'Kern'.
- Corrección de que algunos archivos no se pueden leer.
- No se puede leer el archivo TTF si el nombre del archivo es largo (STM32F103).
- Lectura de glifo más rápido.
- Disminuir el uso de SRAM.
- Manejo de la curva Bezier (cuando excede las 3 dimensiones. Actualmente, procesamiento provisional).
Dibuja FrameBuffer
- Texto de la derecha
- Subrayar
Controlador confirmado
- ESP32 (Junta)
- STM32F103C8T6 (Junta)
Manifestación
- A todo color
- Demo de ILI9341
- SSD1331 Demo
- Mononucleosis infecciosa
- SSD1306 Demo
- Waveshare E-Paper 2.9 pulgadas de demostración
- Waveshare E-Paper 7.5 pulgadas (b) demostración
Nota
¡No dude en publicar cualquier error o idea para soluciones y mejoras!
Confirme los derechos de autor del archivo de fuentes. No distribuí archivos de fuentes.
Se basa en el código de GarretLab y cambia.
https://github.com/GarretLab/truetype
https://garretlab.web.fc2.com/arduino/lab/truetype/