Arduino IDEを用いたマイコン用のTTFフォントレンダリング支援ライブラリです。
このライブラリは、SDカード内のTTFフォントファイルや、プログラムに埋め込まれたTTFフォントファイルを描画することができます。
このプログラムは M5FontRender がベースとなっています。
どんな些細な貢献も歓迎します
- Arduino IDE を使用する様々なハードウェアで利用可能
- アンチエイリアスのかかった美しいフォントの描画
- コードに埋め込まれたフォントデータからの読み込みが可能(SDカード不要)
- 任意の描画ライブラリを使用可能
- FreeTypeの任意のバージョンに変更可能
このリポジトリをArduinoのライブラリフォルダにクローンします。
利用可能なAPIの一覧はこちらをご覧ください。
これは使い方の一部に過ぎません。
より詳細な例はexamplesにあります。
#include "TFT_eSPI.h"
#include "binaryttf.h"
#include "OpenFontRender.h"
TFT_eSPI tft;
OpenFontRender render;
void setup() {
// put your setup code here, to run once:
Serial.begin(115200);
Serial.flush();
delay(50);
tft.begin();
tft.setRotation(3);
tft.fillScreen(TFT_BLACK);
digitalWrite(LCD_BACKLIGHT, HIGH); // turn on the backlight
// print library version
Serial.printf("OpenFontRender Library version: %d.%d\n",
OpenFontRender::MAIN_VERSION,
OpenFontRender::MINER_VERSION);
render.showFreeTypeVersion(); // print FreeType version
render.showCredit(); // print FTL credit
if (render.loadFont(binaryttf, sizeof(binaryttf))) {
Serial.println("Render initialize error");
return;
}
render.setDrawer(tft); // Set drawer object
render.setFontColor(TFT_WHITE);
render.printf("Hello World\n");
render.seekCursor(0, 10);
render.setFontSize(30);
render.setFontColor(TFT_GREEN);
render.printf("完全なUnicodeサポート\n");
render.seekCursor(0, 10);
render.setFontSize(40);
render.setFontColor(TFT_ORANGE);
render.printf("こんにちは世界\n");
}
void loop() {
// put your main code here, to run repeatedly:
}
#if defined(ARDUINO_M5Stack_Core_ESP32) || defined(ARDUINO_M5STACK_FIRE)
#include "M5Stack.h"
#elif defined(ARDUINO_M5STACK_Core2) // M5Stack Core2
#include "M5Core2.h"
#endif
#include "OpenFontRender.h" // Include after M5Stack.h / M5Core2.h
OpenFontRender render;
void setup() {
// put your setup code here, to run once:
M5.begin();
M5.Lcd.fillScreen(BLACK);
// print library version
Serial.printf("OpenFontRender Library version: %d.%d\n",
OpenFontRender::MAIN_VERSION,
OpenFontRender::MINER_VERSION);
render.showFreeTypeVersion(); // print FreeType version
render.showCredit(); // print FTL credit
if (render.loadFont("/JKG-M_3_Tiny.ttf")) {
Serial.println("Render initialize error");
return;
}
render.setDrawer(M5.Lcd); // Set drawer object
render.setFontColor(WHITE);
render.printf("Hello World\n");
render.seekCursor(0, 10);
render.setFontSize(30);
render.setFontColor(GREEN);
render.printf("完全なUnicodeサポート\n");
render.seekCursor(0, 10);
render.setFontSize(40);
render.setFontColor(ORANGE);
render.printf("こんにちは世界\n");
}
void loop() {
// put your main code here, to run repeatedly:
}
バイナリTTFフォントファイルを作成するために、toolsディレクトリにあるbinary2ttf.pyを使用します。
この binary2ttf.py
は、M5EPDライブラリで提供されています。
同じプログラムが、このリポジトリの tools
ディレクトリに含まれています。
以下のコマンドを実行するだけです。
python3 binary2ttf.py your_font_file.ttf
このライブラリでは、描画関連の操作をお好みの関数(例えば LavyonGFX など)に変更することができます。
変更するには、以下の関数を使用します。
render.setDrawPixel(my_draw_function); // 必須
render.setDrawFastHLine(my_draw_fast_h_line); // 任意
render.setStartWrite(my_start_write_function); // 任意
render.setEndWrite(my_end_write_function); // 任意
描画用のオブジェクトがあり、必要なメソッドを含んでいる場合は setDrawer
を利用することも出来ます。
より詳しい説明は API.md をご覧ください。
このライブラリでは、どの FreeType バージョンにも切り替えることができます。
2.4.12 と 2.12.1 で動作することを確認しています。
デフォルトのバージョンは 2.4.12 ですが、これは最も安定して動作していたバージョンだったからです。
- お好きな FreeType のバージョンをダウンロードしてください。
- ダウンロードした FreeType フォルダを OpenFontRender の直下に置きます。
AutoRun
スクリプトを実行します。
FreeRTOS を使用している場合、バージョンによっては不安定になることがあります。
スタックサイズを大きくしたり、useRenderTask
を有効にしないと動作しない場合があります。
本ライブラリは,以下のハードウェアで動作確認をしています。
ここに掲載されていないハードウェアでの報告もお待ちしております。
- Arduino IDE 2.0
- Seeed SAMD Boards (Board Manager v1.8.3)
- Wio Terminal
- M5Stack (Board Manager v2.0.4)
- M5Stack Basic (Library v0.1.4)
- M5Stack Core2 (Library v0.4.0)
- Seeed SAMD Boards (Board Manager v1.8.3)
- PlatformIO
- M5Stack Basic (Library v2.0.4)
- M5Stack Core2 (Library v2.0.4)
- ESP-IDF (4.4)
- M5Stack Basic
下の表はサンプルプログラムを実行したときの描画時間です。
注:描画時間はハードウェアの設定やフォントファイルによって異なるので、参考程度にお考えください。
Load from SD | Load from array | Load from array (Use LavyonGFX) |
|
---|---|---|---|
Wio Terminal | 576 ms | 491 ms | 405 ms |
M5Stack Basic | 227 ms | 230 ms | 98 ms |
M5Stack Core2 | 346 ms | 281 ms | 148 ms |
このライブラリは FTL ライセンスで提供されています。
これは、クレジット条項を持つ BSD スタイルのライセンスです。
本ライブラリを使用して作成されたプログラムやバイナリには,必ずクレジットを記載しなければなりません(本READMEの下部に記載されているようなものです)。
ただし,FreeType に関係の無いいくつかのファイルは,MIT ライセンスのもとで使用することができます(各ファイルを参照).
FTL ライセンスの詳細については,このリポジトリの doc/FTL.TXT または FreeType Licenses を参照してください.
サンプルプログラムには、以下のフォントファイルを使用しています。
これらの素晴らしいフォントを使いやすいライセンスで提供してくださった sozai-font-hako さんに感謝いたします。
Font | Copyright |
---|---|
JK Gothic M | Copyright (c) 2014 M+ FONTS PROJECT Copyright (c) 2015 JK FONTS |
- FreeType-2.11.0 API Reference
- FreeType に関するメモ
- FreeType2を試す-3-小さいサイズで描画 | ぬの部屋(仮)
- True type fontのレンダリング その2 - 忘備録-備忘録
- libvita2d/vita2d_font.c at master · xerpi/libvita2d
- freetype 函数介绍_guoke312的专栏-程序员宅基地 - 程序员宅基地
- Freetype 内存回收 / 计算机图形/GUI/RTOS/FileSystem/OpenGL/DirectX/SDL2 / WhyCan Forum(哇酷开发者社区)
- FreeType 2 Caching
- C++ (Cpp) FTC_Manager_LookupSize Examples - HotExamples
- FreeType的缓存 - 百度文库
- freeType移植总结①——使用keil编译freeType2库 - 编程猎人
- FreeTypeの使い方 - Qiita
- じぶんめも Qtでfreetype
- C++ (Cpp) FT_Glyph_To_Bitmapの例 - HotExamples
- freetype2 - example1.c
- FreeType2でフォントテクスチャ作る際のコツ。ピクセルサイズで作るのと文字送り量の取得 - GameProgrammar's Night
- FreeTypeのベースラインあわせでかなりハマッタのでメモ - くそにそてくにっく
- 【C++/MinGW】FreeTypeを使ってTTFファイルから文字レンダリング - とある科学の備忘録
- OpenGLでFreeTypeを使って文字列を描画してみた2。(FreeTypeキャッシュ編)
- FreeType を使って文字を描画する - インゲージ開発者ブログ
- [Font][Freetype]26.6 fractional pixel formatってなぁに? にお答えしますね – あおいろヨゾラ
- freetype - How to get height of font in Freetype2 - Stack Overflow
- True type fontのレンダリング その7 - 忘備録-備忘録
- FreeType-2.4.7 API Reference
- The FreeType Caching Sub-System
- freetype 2.8.1 | DirectAdmin Forums
- Deleting a task and erasing it's handler - FreeRTOS
- FreeRTOS タスクスケジューリングまとめ - Qiita
- sedの正規表現で「\w」「\d」「\s」を実現する方法: 小粋空間
- Regex in Powershell fails to check for newlines - Stack Overflow
Portions of this software are copyright © The FreeTypeProject (www.freetype.org). All rights reserved.