Tampilkan font truetype untuk Arduino
Baca Truetype (.ttf) dari FS (Kel. SD/Spiffs/FATFS) dan tulis Framebuffer.
- Baca file truetype (format 'cmap').
- Tulis string apa pun ke framebuffer pengguna.
- Mendukung "mesin terbang sederhana" dan bagian dari "mesin terbang majemuk".
- Atur ukuran font, posisi, warna, jarak, putar.
- String yang terpusat dan benar. Dengan mendapatkan panjang string.
- Baca tabel 'kern' (format0) dan kerning.
- Atur karakter yang indah berdasarkan tabel 'HMTX'.

Manual Referensi Truetype ™
https://developer.apple.com/fonts/truetype-reference-manual/
Perpustakaan asli untuk STM32 ada di sini.
Kode standar
//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 (file _file, uint8_t _checkchecksum = 0);
- Atur file TTF yang dibaca dari SD, Spiffs, FATFS, dll.
- File _File: File TTF.
- Return: 1 = Baca Sukses, 0 = Baca Kegagalan.
void setframeBuffer (uint16_t _frameBufferWidth, uint16_t _frameBufferHeight, uint16_t _frameBuffer_bit, uint8_t _frameBufferDirection, uint8_t *_frameBuffer);
- Pengaturan Framebuffer.
- uint16_t _frameBufferWidth: Width framebuffer.
- uint16_t _frameBufferHeight: Framebuffer Eight.
- uint16_t _frameBuffer_bit: Jumlah bit per piksel. (1,4,8bit diterapkan)
- uint8_t _frameBufferDirection: orientasi bit.
- uint8_t *_frameBuffer: Pointer Framebuffer.
- Jika Anda ingin sesuai dengan Framebuffer Anda sendiri, edit fungsi AddPixel. Jika Anda menambahkan kode, silakan bagikan!
void setcharacterspacing (int16_t _characterspace, uint8_t _kerning = 1);
- Mengatur lebar antara karakter.
- int16_t _characterspace: nilai lebar antar karakter.
- uint8_t _kerning: Baca dan gunakan tabel 'kern'. 1: 'kern' + _characterspace. 0: _Characterspace.
void setcharactersize (uint16_t _charactersize);
- Pengaturan ukuran font.
- uint16_t _charactersize: Tinggi karakter.
void setTextBoundary (uint16_t _start_x, uint16_t _end_x, uint16_t _end_y);
- Mengatur rentang string.
- Koordinat sumbu berputar dengan "settextrotation"
- uint16_t _start_x: Titik awal x dari string karakter saat garis istirahat terjadi.
- uint16_t _end_x: Poin terakhir x saat melanggar garis.
- uint16_t _end_y: Poin terakhir y saat melanggar garis.
void setTextColor (uint8_t _online, uint8_t _inside);
- Pengaturan warna teks.
- uint8_t _online: warna garis besar karakter.
- uint8_t _inside: warna pengisian teks.
batal settExtrotation (uint8_t _rotation);
- Rotasi teks
- Putar bersama dengan sumbu koordinat. Gambar adalah gambar berikut.

uint8_t _rotation: sudut rotasi.
- (Rotate_0/rotate_90/rotate_180/rotate_270)
void TextDraw (uint16_t _x, uint16_t _y, const wchar_t _character []);
- Tulis string ke framebuffer.
- uint16_t _x: String Start Point x.
- uint16_t _y: string start point y.
- const wchar_t _character []: pointer string (karakter byte ganda).
void TextDraw (uint16_t _x, uint16_t _y, const char _character []);
- Tulis string ke framebuffer.
- uint16_t _x: String Start Point x.
- uint16_t _y: string start point y.
- const char _character []: string pointer (karakter byte tunggal).
void TextDraw (uint16_t _x, uint16_t _y, const string _string);
- Tulis string ke framebuffer.
- uint16_t _x: String Start Point x.
- uint16_t _y: string start point y.
- const string _string: string pointer (tipe string).
uint16_t getstringwidth (const wchar_t _character []);
- const wchar_t _character []: pointer string (karakter byte ganda).
- Kembali: Panjang string. Istirahat garis otomatis tidak dipertimbangkan.
- Dapat digunakan untuk Text Align Center/Right.
uint16_t getstringwidth (const char _character []);
- const char _character []: string pointer (karakter byte tunggal).
- Kembali: Panjang string. Istirahat garis otomatis tidak dipertimbangkan.
- Dapat digunakan untuk Text Align Center/Right.
uint16_t getStringWidth (const string _string);
- const string _string: string pointer (tipe string).
- Kembali: Panjang string. Istirahat garis otomatis tidak dipertimbangkan.
- Dapat digunakan untuk Text Align Center/Right.
void end ();
Format Framebuffer
Orientasi bit saat menyimpan informasi untuk beberapa piksel per byte framebuffer.
Jenis framebuffer dibagi secara luas sesuai dengan arah ini.
Saat ini didukung: Horizontal - 1,4,8bit
Horisontal
Contoh dengan 1bit / 1pixel

Vertikal
Contoh dengan 1bit / 1pixel

Keaslian
- Memperbaiki masalah yang tidak dapat dibaca oleh beberapa file font.
- Menangani kurva bezier.
- Ini mendukung kurva bezier pesanan ke -3, tetapi urutan ke -4 dan di atas ditarik sebagai garis lurus.
- Garis besar warna dan warna pengisian dapat diatur secara individual.
- Mendukung penulisan ke array. Font digambar dalam beberapa bentuk framebuffer (array uint8_t).
- Kerning dengan membaca tabel 'kern'.
- Baca tabel 'HMTX' dan sesuaikan tata letak.
- Proses pengisian yang efisien.
Pekerjaan di masa depan
Truetype
- Dukungan penuh untuk "majemuk mesin"
- Diversifikasi format Framebuffer yang didukung.
- Hanya dukungan untuk format 'CMAP' dan format 'kern' yang didukung.
- Koreksi bahwa beberapa file tidak dapat dibaca.
- Tidak dapat membaca file TTF jika nama file panjang (STM32F103).
- Bacaan mesin terbang yang lebih cepat.
- Mengurangi penggunaan SRAM.
- Penanganan Kurva Bezier (ketika melebihi 3 dimensi. Saat ini, pemrosesan sementara).
Gambar Framebuffer
- Teks dari kanan
- Menggarisbawahi
Pengontrol yang dikonfirmasi
- ESP32 (Dewan)
- STM32F103C8T6 (papan)
Demo
- Warna penuh
- Demo ILI9341
- Demo SSD1331
- Mono
- Demo SSD1306
- Waveshare E-Paper 2.9inch Demo
- Waveshare E-Paper 7.5Inch (B) Demo
Catatan
Jangan ragu untuk memposting bug atau ide untuk perbaikan dan perbaikan!
Konfirmasikan hak cipta file font. Saya tidak mendistribusikan file font.
Ini didasarkan pada kode oleh Garretlab dan diubah.
https://github.com/garretlab/truetype
https://garretlab.web.fc2.com/arduino/lab/truetype/