Skip to content

Latest commit

 

History

History
273 lines (201 loc) · 12.8 KB

README_JA.md

File metadata and controls

273 lines (201 loc) · 12.8 KB

Open Font Render

Arduino IDEを用いたマイコン用のTTFフォントレンダリング支援ライブラリです。
このライブラリは、SDカード内のTTFフォントファイルや、プログラムに埋め込まれたTTFフォントファイルを描画することができます。

このプログラムは M5FontRender がベースとなっています。
どんな些細な貢献も歓迎します

image

特徴

  • Arduino IDE を使用する様々なハードウェアで利用可能
  • アンチエイリアスのかかった美しいフォントの描画
  • コードに埋め込まれたフォントデータからの読み込みが可能(SDカード不要)
  • 任意の描画ライブラリを使用可能
  • FreeTypeの任意のバージョンに変更可能

インストール

このリポジトリをArduinoのライブラリフォルダにクローンします。

API と 使い方

API

利用可能なAPIの一覧はこちらをご覧ください。

使い方

これは使い方の一部に過ぎません。
より詳細な例はexamplesにあります。

プログラムコードから読み込み (Wio Terminal)

#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:
}

SDカードから読み込み (M5Stack)

#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をプログラムに埋め込む方法

バイナリ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 のバージョンを変更する

このライブラリでは、どの FreeType バージョンにも切り替えることができます。
2.4.12 と 2.12.1 で動作することを確認しています。
デフォルトのバージョンは 2.4.12 ですが、これは最も安定して動作していたバージョンだったからです。

変更方法

  1. お好きな FreeType のバージョンをダウンロードしてください。
  2. ダウンロードした FreeType フォルダを OpenFontRender の直下に置きます。
  3. 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)
  • 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

その他


Portions of this software are copyright © The FreeTypeProject (www.freetype.org). All rights reserved.