サイログ。

~雑多な記事置き場~

小さい文字をTTFで描画する

前々から悩んでいたわけですが、Ruby/SDLとかでTrueTypeフォントを使って小さい文字(サイズが16とか12とか)を
描画すると文字が崩れる問題が見受けられたわけで。


こないだ、気になって調べていたらあっさり原因が分かりました。


SDL_ttfのバグでした。


TrueTypeフォントの中には、フォントサイズが小っちゃくなると、アウトラインじゃなくて
内蔵のビットマップを表示させるものがあります(MS明朝とか)。
ところが、ついこないだまでのSDL_ttfでは、そこらへんの切り替えが結構オバカさんで、
うまいことビットマップを引っ張ってくれない問題がありました。
(ちなみに、メイリオとかは、そーゆービットマップが無いので、小さいサイズでも表示されます)


この点を言及されているURLのリンクを貼っておきます。
http://ilaliart.55street.net/tips/ttf_mini.html
http://lists.sourceforge.jp/mailman/archives/efont-devel/2006-July/000147.html

実は、更に問題があって、小さいサイズでboldとかのスタイルを変更するとコケます
(そのため、Miyakoでは、boldとかの設定を外していました)


ただし、現在出回っているSDL_ttf(バージョン2.0.9以降)では、そのバグが直っていますので、
SDL_ttfを最新のものに置き換えれば問題を回避できます。

やり方を書いておきます(Ruby/SDLWindowsバイナリ版を使用している場合)。

  1. SDL_ttfのページから、「SDL_ttf-2.0.9-win32.zip」をダウンロードする(「2.0.9」は変動している可能性あり)
  2. ダウンロードしたファイルを解凍して、できた「SDL_ttf.dll」と「libfreetype-6.dll」を、Ruby/SDLをインストールしたRuby実行環境のbinディレクトリ(c:\Program Files\ruby-1.8にインストールされていれば、c:\Program Files\ruby-1.8\binのこと)にコピー


これで、フォントサイズを小さくしたMS明朝とかの文字がちゃんと出てくるようになります。
もちろん、boldとかのスタイル設定も問題なく動きます(一応、Miyakoで確認済み)。


ちなみに、Miyakoでの対応は1.5以降になります。

・・・本当は、Ruby/SDLのサイトにあるWindowsバイナリ版が最新のSDL_ttfに差し替えていただけると嬉しいのですが・・・。