mieki256's diary



2014/12/15(月) [n年前の日記]

#1 [dxruby] DXRubyとBDFフォント

BDFフォントは、大昔の*NIX環境で使われることが多かったビットマップフォントのフォーマット。拡張子は .bdf で、中身はテキストファイル。

それを DXRubyで表示できないか試したり。たぶんそれっぽくできたような気がするのでアップロード。環境は Windows7 + Ruby 1.9.3 mingw + DXRuby 1.4.1。

dxruby_bdffont_ss.png

_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
_bdffontsupport_20141216.zip
_bdffontsupport_20141215.zip

実験用のbdfフォントは、 _M+ BITMAP FONTS と、 _milkjfフォント(Internet Archive) を使わせていただきました。ありがたや。

iso8859(英数字)と、jisx0208(ひらがな、漢字)には対応したけど、iso10646とやらの文字コードには対応できなかったです。Ruby を使って SJIS から iso10646 に文字コードを変換する方法が分からなくて。NKFモジュールのドキュメントを眺めてみたけど、変換できるのかどうか今一つ分からず。

それと、たぶん一部の文字表示でバグがありそうな予感。チルダ、波ダッシュ、円マークあたりは怪しいのではないかなあ…。もっとも、元のBDFフォントファイルのコード割り当てがおかしい場合もあるらしいし…。

一応書いてはみたものの。 :

たぶん使い道がないような気も。
  • DXRuby は ttfフォントを使って縁取りや影をつけた綺麗な描画ができるし。
  • ビットマップフォントを使いたい場合は、色々化粧して描画したい、という需要があるはずだから、白黒二値のビットマップフォント描画はさほど需要がナサゲ。
  • BDFフォントは昔のフォントだから、独自ライセンスだらけ。プログラムと同梱できるBDFフォントは、さほど多くない印象。「フリーフォント」と謳っていても、フォント作者様への使用報告義務があるとか、商用利用禁止とか、時代を感じさせる妙な制限がついてたり。

「このBDFフォントの形がどうしても好きなんや」「直接BDFフォントを同梱して描画したいのや」という場面では使えるかもだけど、そんな場面がどの程度あるかというと…。SFont や BMFont の形で一旦画像化したほうが使い勝手が良さそう、と思えたり。

まあ、「BDFフォントの描画もやろうと思えばできる」と分かったから、これはこれで。

2014/12/16追記。 :

初期化処理で時間がかかり過ぎてる感じがしたので、少しだけ高速化。2秒 → 0.6秒ぐらいまで改善できたので差し替えておきました。

2014/12/17追記。 :

文字の番号を取得する部分でバグがあったので修正しました。

以上です。

過去ログ表示

Prev - 2014/12 - Next
1 2 3 4 5 6
7 8 9 10 11 12 13
14 15 16 17 18 19 20
21 22 23 24 25 26 27
28 29 30 31

カテゴリで表示

検索機能は Namazu for hns で提供されています。(詳細指定/ヘルプ


注意: 現在使用の日記自動生成システムは Version 2.19.6 です。
公開されている日記自動生成システムは Version 2.19.5 です。

Powered by hns-2.19.6, HyperNikkiSystem Project