Zeigen Sie TrueType -Schriftart für Arduino an
Lesen Sie TrueType (.ttf) aus FS (Ex. SD/SPIFFS/FATFS) und schreiben Sie FrameBuffer.
- Lesen Sie TrueType -Dateien ('CMAP' Format4).
- Schreiben Sie eine Zeichenfolge in den FrameBuffer des Benutzers.
- Unterstützt "einfache Glyphen" und Teil von "zusammengesetzten Glyphen".
- Schriftgröße, Position, Farbe, Abstand einstellen, drehen.
- Zentrierte und rechts ausgerichtete Saiten. Durch die Länge der Saite.
- Lesen Sie die "Kern" -Tabelle (Format0) und Kerning.
- Wunderschön an den Tisch 'HMTX' anordnen.

TrueType ™ Referenzhandbuch
https://developer.apple.com/fonts/truetype-reference-manual/
Die native Bibliothek für STM32 ist hier.
Standardcode
//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 settffile (Datei _file, uint8_t _checkchecksum = 0);
- Legen Sie die TTF -Datei fest, die von SD, Spiffs, FatFs usw. gelesen wurde.
- Datei _file: TTF -Datei.
- Rückgabe: 1 = erfolgreich lesen, 0 = Misserfolg lesen.
void setFrameBuffer (uint16_t _framebufferwidth, uint16_t _framebufferHeight, uint16_t _framebuffer_bit, uint8_t _framebufferDirection, uint8_t *_framebuffer);
- FrameBuffer -Einstellungen.
- UINT16_T _FRAMEBUFFERWIDTH: FrameBuffer Breite.
- UINT16_T _FRAMEBUFFERHEIT: FrameBuffer acht.
- UINT16_T _FRAMEBUFFER_BIT: Die Anzahl der Bits pro Pixel. (1,4,8bit implementiert)
- UINT8_T _FRAMEBUFFERDIRECTION: Bit -Orientierung.
- Siehe Framebuffer -Format
- UINT8_T *_FRAMEBUFFER: FrameBuffer Pointer.
- Wenn Sie möchten, dass es Ihrem eigenen FrameBuffer entspricht, bearbeiten Sie die Addpixel -Funktion. Wenn Sie Code hinzufügen, teilen Sie ihn bitte weiter!
void setCharacterSpacing (int16_t _characterSpace, uint8_t _cerning = 1);
- Festlegen der Breite zwischen Zeichen.
- INT16_T _characterspace: Breitenwert zwischen Zeichen.
- UINT8_T _SKERNING: Lesen und verwenden Sie TTF 'Kern' Tabelle. 1: 'Kern' + _characterspace. 0: _characterspace.
void setCharacterSize (uint16_t _charactersize);
- Schriftgrößeneinstellung.
- uint16_t _charactersize: Zeichenhöhe.
void setTextBoundary (uint16_t _start_x, uint16_t _end_x, uint16_t _end_y);
- Einstellen des Zeichenfolgebereichs.
- Koordinatenachsen drehen sich mit "settextrotation"
- uint16_t _start_x: Der Ausgangspunkt x der Zeichenzeichenfolge, wenn ein Zeilenumbruch auftritt.
- uint16_t _end_x: Der letzte Punkt x Beim Brechen einer Zeile.
- uint16_t _end_y: Der letzte Punkt y beim Brechen einer Zeile.
void setTextColor (uint8_t _online, uint8_t _inside);
- Textfarbeneinstellung.
- uint8_t _online: Charakterumriss Farbe.
- uint8_t _inside: Textfüllfarbe.
void settextrotation (uint8_t _rotation);
- Textrotation
- Drehen Sie zusammen mit den Koordinatenachsen. Das Bild ist das folgende Bild.

UINT8_T _ROTATION: Rotationswinkel.
- (Rotate_0/rotate_90/rotate_180/rotate_270)
void textDraw (uint16_t _x, uint16_t _y, const wchar_t _character []);
- Schreiben Sie eine Zeichenfolge in den FrameBuffer.
- UINT16_T _X: STRING START POINT X.
- UINT16_T _Y: STRING START POINT Y.
- const wchar_t _character []: String-Zeiger (Doppel-Byte-Zeichen).
void textDraw (uint16_t _x, uint16_t _y, const char _character []);
- Schreiben Sie eine Zeichenfolge in den FrameBuffer.
- UINT16_T _X: STRING START POINT X.
- UINT16_T _Y: STRING START POINT Y.
- const char _character []: String-Zeiger (Single-Byte-Zeichen).
void textDraw (uint16_t _x, uint16_t _y, const string _string);
- Schreiben Sie eine Zeichenfolge in den FrameBuffer.
- UINT16_T _X: STRING START POINT X.
- UINT16_T _Y: STRING START POINT Y.
- const String _string: String -Zeiger (String -Typ).
uint16_t getStringWidth (const wchar_t _character []);
- const wchar_t _character []: String-Zeiger (Doppel-Byte-Zeichen).
- Rückkehr: Die Länge der Zeichenfolge. Automatische Linienbrüche werden nicht berücksichtigt.
- Kann für Text aus Align Center/Right verwendet werden.
uint16_t getstringwidth (const char _character []);
- const char _character []: String-Zeiger (Single-Byte-Zeichen).
- Rückkehr: Die Länge der Zeichenfolge. Automatische Linienbrüche werden nicht berücksichtigt.
- Kann für Text aus Align Center/Right verwendet werden.
uint16_t getStringWidth (const String _string);
- const String _string: String -Zeiger (String -Typ).
- Rückkehr: Die Länge der Zeichenfolge. Automatische Linienbrüche werden nicht berücksichtigt.
- Kann für Text aus Align Center/Right verwendet werden.
void End ();
FrameBuffer -Format
Bit -Orientierung beim Speichern von Informationen für mehrere Pixel pro Byte des FrameBuffer.
Die Arten von Framebuffern sind nach dieser Richtung weitgehend unterteilt.
Derzeit unterstützt: horizontal - 1,4,8bit
Horizontal
Beispiel mit 1bit / 1pixel

Vertikal
Beispiel mit 1bit / 1pixel

Originalität
- Problem behoben, dass einige Schriftartdateien nicht gelesen werden konnten.
- Umgang mit Bezier -Kurven.
- Es unterstützt bis zu Bezier -Kurven der 3. Ordnung, aber die 4. Ordnung und höher werden als gerade Linien gezeichnet.
- Die Farbe und die Füllfarbe können einzeln eingestellt werden.
- Unterstützt das Schreiben an Arrays. Schriftarten werden in irgendeiner Form von FrameBuffer (UINT8_T -Array) gezeichnet.
- Kerning durch Lesen des Kern -Tisches.
- Lesen Sie die Tabelle "HMTX" und passen Sie das Layout an.
- Effizienter Füllprozess.
Zukünftige Arbeit
TrueType
- Vollständige Unterstützung für "zusammengesetzte Glyphen"
- Diversifizierung unterstützter Framebufferformate.
- Nur Unterstützung für das "CMAP" -Format 4 und das "Kern" -Format0 wird unterstützt.
- Korrektur, dass einige Dateien nicht gelesen werden können.
- TTF -Datei kann nicht gelesen werden, wenn der Dateiname lang ist (STM32F103).
- Schnelleres Glyphenlesen.
- Verringerung der Verwendung von SRAM.
- Handhabung der Bezier -Kurve (bei Überschreitung von 3 Abmessungen. Derzeit, vorläufige Verarbeitung).
Framebuffer zeichnen
- Text von rechts
- Unterstreichen
Bestätigter Controller
- ESP32 (Vorstand)
- STM32F103C8T6 (Board)
Demo
- Volle Farbe
- ILI9341 Demo
- SSD1331 Demo
- Mono
- SSD1306 Demo
- Waveshare E-Paper 2,9-Zoll-Demo
- Waveshare E-Papier 7,5 Zoll (b) Demo
Notiz
Fühlen Sie sich frei, Fehler oder Ideen für Korrekturen und Verbesserungen zu veröffentlichen!
Bestätigen Sie das Urheberrecht der Schriftart. Ich habe keine Schriftdateien verteilt.
Es basiert auf dem Code von Garretlab und änderte sich.
https://github.com/garretlab/truetype
https://garretlab.web.fc2.com/arduino/lab/truetype/