2014/12/15(月) [n年前の日記]
#1 [dxruby] DXRubyとBDFフォント
BDFフォントは、大昔の*NIX環境で使われることが多かったビットマップフォントのフォーマット。拡張子は .bdf で、中身はテキストファイル。
それを DXRubyで表示できないか試したり。たぶんそれっぽくできたような気がするのでアップロード。環境は Windows7 + Ruby 1.9.3 mingw + DXRuby 1.4.1。
_bdffont.rb
(必要なBDFフォントが置いてあるディレクトリ内で) bdffont.rb を実行すれば、上記のような画面に。
外部スクリプトから呼び出す時は、以下のような感じで。
BDFフォントファイルも含めて、ファイル一式を置いときます。ソースのライセンスは Public Domain ってことで。
_bdffontsupport_20141217.zip
_bdffontsupport_20141216.zip
_bdffontsupport_20141215.zip
実験用のbdfフォントは、 _M+ BITMAP FONTS と、 _milkjfフォント(Internet Archive) を使わせていただきました。ありがたや。
iso8859(英数字)と、jisx0208(ひらがな、漢字)には対応したけど、iso10646とやらの文字コードには対応できなかったです。Ruby を使って SJIS から iso10646 に文字コードを変換する方法が分からなくて。NKFモジュールのドキュメントを眺めてみたけど、変換できるのかどうか今一つ分からず。
それと、たぶん一部の文字表示でバグがありそうな予感。チルダ、波ダッシュ、円マークあたりは怪しいのではないかなあ…。もっとも、元のBDFフォントファイルのコード割り当てがおかしい場合もあるらしいし…。
それを DXRubyで表示できないか試したり。たぶんそれっぽくできたような気がするのでアップロード。環境は Windows7 + Ruby 1.9.3 mingw + DXRuby 1.4.1。
_bdffont.rb
(必要なBDFフォントが置いてあるディレクトリ内で) bdffont.rb を実行すれば、上記のような画面に。
外部スクリプトから呼び出す時は、以下のような感じで。
require 'dxruby' require_relative 'bdffont' bdf = BDFFont.new("mplus_j12r_jisx0208.bdf") bdf.add("mplus_f12r_iso8859.bdf") Window.loop do x, y = 10, 10 Window.draw_bdffont(x, y, "This is a BDF font", bdf) y += bdf.height Window.draw_bdffont(x, y, "The quick brown fox jumps over the lazy dog.", bdf) y += bdf.height Window.draw_bdffont(x, y, "1234567890 ! = - +", bdf) y += bdf.height Window.draw_bdffont(x, y, "あたらしい朝が来た希望の朝だ。", bdf) end
BDFフォントファイルも含めて、ファイル一式を置いときます。ソースのライセンスは Public Domain ってことで。
_bdffontsupport_20141217.zip
実験用のbdfフォントは、 _M+ BITMAP FONTS と、 _milkjfフォント(Internet Archive) を使わせていただきました。ありがたや。
iso8859(英数字)と、jisx0208(ひらがな、漢字)には対応したけど、iso10646とやらの文字コードには対応できなかったです。Ruby を使って SJIS から iso10646 に文字コードを変換する方法が分からなくて。NKFモジュールのドキュメントを眺めてみたけど、変換できるのかどうか今一つ分からず。
それと、たぶん一部の文字表示でバグがありそうな予感。チルダ、波ダッシュ、円マークあたりは怪しいのではないかなあ…。もっとも、元のBDFフォントファイルのコード割り当てがおかしい場合もあるらしいし…。
◎ 一応書いてはみたものの。 :
たぶん使い道がないような気も。
「このBDFフォントの形がどうしても好きなんや」「直接BDFフォントを同梱して描画したいのや」という場面では使えるかもだけど、そんな場面がどの程度あるかというと…。SFont や BMFont の形で一旦画像化したほうが使い勝手が良さそう、と思えたり。
まあ、「BDFフォントの描画もやろうと思えばできる」と分かったから、これはこれで。
- DXRuby は ttfフォントを使って縁取りや影をつけた綺麗な描画ができるし。
- ビットマップフォントを使いたい場合は、色々化粧して描画したい、という需要があるはずだから、白黒二値のビットマップフォント描画はさほど需要がナサゲ。
- BDFフォントは昔のフォントだから、独自ライセンスだらけ。プログラムと同梱できるBDFフォントは、さほど多くない印象。「フリーフォント」と謳っていても、フォント作者様への使用報告義務があるとか、商用利用禁止とか、時代を感じさせる妙な制限がついてたり。
「このBDFフォントの形がどうしても好きなんや」「直接BDFフォントを同梱して描画したいのや」という場面では使えるかもだけど、そんな場面がどの程度あるかというと…。SFont や BMFont の形で一旦画像化したほうが使い勝手が良さそう、と思えたり。
まあ、「BDFフォントの描画もやろうと思えばできる」と分かったから、これはこれで。
◎ 2014/12/16追記。 :
初期化処理で時間がかかり過ぎてる感じがしたので、少しだけ高速化。2秒 → 0.6秒ぐらいまで改善できたので差し替えておきました。
◎ 2014/12/17追記。 :
文字の番号を取得する部分でバグがあったので修正しました。
[ ツッコむ ]
以上です。