「WinFont+」開発記録 Part 4
今回はFreeTypeを使ってみました。
GDI++(FreeType版)やMacTypeのコードを読むと難しそうな印象でしたが、FreeType公式の最新のドキュメントを見ながらやってみたら思ってたより簡単でした。ラスタライズは全部FreeTypeでやっていますが、フォントの読み込みと座標計算にはDirectWriteを使っている関係でWindows 8.1以降じゃないと動きません。
処理の流れはFreeTypeで太さ調整&縦横3倍(面積9倍)でラスタライズ→ぼかして縮小→濃さ調整→GDIに描画となっています。DirectWriteより若干遅くなるものの、無視できる程度の遅さです。
GDI++やMacTypeではフォントの太さ調整は、フォントのサイズや元の太さを全く考慮せず均一に太くするので、小さくて太い文字が太くなりすぎたり、大きくて細い文字がほとんど太くならなかったりする問題がありました。WinFont+_alpha3ではフォントの太さを測った上でさらにフォントのサイズも考慮して太さを調整しています。游ゴシック Lightなど細すぎるフォントで大きな効果を発揮します。
太字がGDIやDirectWriteと比べてやけに太いのはFreeTypeの仕様です。
その他にFirefox等で文字が見切れる問題の修正や、座標計算で必要な行列演算にDirect2Dを使ってみたり、APIフックにEasyHookを使うようにしてみたりといくつかの修正があります。
Download
WinFont+_alpha3
WinFont+_alpha3
※キャッシュサイズに制限を設けていないので、常用するとメモリを使いすぎる可能性があります。作者の環境では特に気にするほどではありませんでしたが。