ちょっとTea Time!? フォントデータをつくって見ようかな? 2020.10.11
800×480のLCDを買って表示できるようになったのはいいのだけど、いままでの16ドットの文字では少し小さいです。
もっと大きなフォントを使いたいところです。そこで、ネットを探したら、ドットタイプのフォントデータなんて簡単に見つかるかと思っていましたが、
なかなか見つかりません。そういえば以前探したときに16x16ドットのフォントですら、なかなか見つからなかった気がします。
ということで、応急処置的に今ある16X16ドットのフォントを単純に拡大して、32x32のフォントにしてみました。
さすがに大きくなると見やすいですが、パッと見ではわかりづらいですが、細かく見ると粗さが見えます。
32x32ぼフォントは16x16のフォントを単純に拡大しただけですが、すこし粗いです。
それに、この大きさだと、すこし大きすぎる感じもあります。もっと、細長くてもいいかな〜、あるいは24X24くらいのサイズでもいいかも〜です。
でも、フォントデータがあまり見つからないこともあるので、ここは一つ作ってみましょう!
エクセルとペイントを活用してフォント作り!
ドットフォントを作りたいわけですが、まさか一からつくると気が遠くなります。
ということで、横着してWINDOWSでの表示画面の文字画素から拾いあげてやろう、というのが今回の作戦です。
1.まずはエクセルで文字探し
まずはエクセル上で、文字を打ち込みます。必要な文字は英数字と記号だけでよいので約100個程度です。
文字を打ち込んだあとは、良さげなフォントを探していきます。明朝よりゴシックの方がみやすいかもです。
なぜ、エクセルを使うかというと、文字を等間隔に並べることができるからです。
それに、罫線が文字区切りの識別となります。
まずはエクセルをつかって文字を打ち込みます。ここでフォントを選択です。
2.次はペイントにコピー
エクセルで文字を書いたら、その領域だけをペイントソフトにコピーです。ここでは、あとの処理がしやすいように白黒に変換しておきます。
ここでのポイントは文字のサイズはできるだけ32X32画素など、好みのサイズにあうようにエクセルでのフォントサイズを選択します。
ペイントソフトにエクセルで書いた文字をコピーします。罫線も自動的についてきます。
これで約32×32ドットのフォントのクオリティ。
3.次はソフトで文字を切り抜き
ペイントソフトを経由した画像データは白黒のBMPファイルになっていますので、あとはそこから文字の画素を読み取っていきます。
BMPファイルのフォーマットはネットを調べればすぐにわかります。画像ファイルに罫線がありますから、一文字の範囲も容易に
探索することができます。
抽出した文字データは一旦テキストファイルに変換しておきます。ここで、すこし気になるところがあれば手動で修正です。
まあ、ほとんど修正するところはありません。
文字データを次にテキスト形式に変換しておきます。
4.最後にバイナリーコードに変換
最後に、C言語のデータファイルに変換です。この変換は16進でも10進でもどちらでも
いいのですが、10進のほうがテキストが少し短くなります。
1文字あたり128バイトになりますから、全体では結構なデータ量になります。
最後にC言語で使えるようにプログラムデータに変換です。
すこし滑らかになりました
さて、実際にLCDに表示されましたが、すこし滑らかになったと思います。
すこし滑らかになりました。すこし修正の必要な文字がありますが、おいおいやっていきましょう。
さて、だいたい必要なソフトはできたので、いろいろなフォントを作っておきましょう!
UNIX系にデータがあるようです 2020.10.13
こんな情報を頂きました。
ここに色々なフォントのデータがあるようです。 https://ftp.gnu.org/old-gnu/intlfonts/intlfonts-1.1-split/
データはBDFというフォーマットのようですが、テキストファイルなので中身はすぐにわかります。
ということで、そこからデータを取り出してやりました。漢字データは要らない(というか容量的に無理)なので
英数記号だけをピックアップです。
いままで使っているフォントとあわせて表示させてみました。
流石に8x8フォントは小さいです。でも、画面に顔を近づければ文字は判読できます。普通につかうなら、16x16ドット以上でしょうか。
見出しなら24ドット以上が必要でしょうね。
8x8から32×32のフォントを表示させてみました。8×8は小さいです。
8×8でも判別はできますが、顔を近づけないと無理です。
容量は結構必要
英数記号だけでも、96文字あります。どのくらいの容量になるかといえば
上記のフォントをすべて乗せると約25kバイトにもなります。これで64kbしかないPIC内の
ROMを40%近く占めることになります。
32×32フォント 128バイト/文字 × 96 = 12288 バイト
24×24フォント 72バイト/文字 × 96 = 6912 バイト
16×16フォント 32バイト/文字 × 96 = 3072 バイト
8×16フォント 16バイト/文字 × 96 = 1536 バイト
8×8フォント 8バイト/文字 × 96 = 768 バイト
---------------------------------------------------
合計 24576バイト
使用するフォントを絞るか、外付けEEPROMに入れるかしないと駄目ですね。
(おしまい)