ビットマップフォントとアウトラインフォント(詳)

Courierでビットマップフォントを調べる

Debian GNU/Linux の lenny というバージョンではビットマップフォントは少数派になっています。

ここではCourier(クーリエ)というフォントでビットマップフォントの実例をみてみます。

ビットマップは拡大するとギザギザが目立つし、縮小すると隙間がつぶれたり線がなくなったりと形が崩れます

元々
12ptのA
18ptを
12相当に縮小
18ptのA 18ptを
32相当に拡大
元々
32ptのA
本来の大きさ
4倍に拡大

そこで何種類かの大きさのものを設計します。

pt 8 10 12 14 18 24 32
本来の大きさ
4倍に拡大

しかし、この方法で次々と大きなフォントを作っていくとデータ量が莫大になってしまいます。Courier などビットマップ方式のフォントはLennyでは拡大しても、ある程度以上は大きくなりません。(ソフトによっては汚くなっても無理矢理拡大する場合があるかも知れません)そしてギザギザが見えています。このギザギザをエイリアシングといいます。

Courier 10 Pitchでアウトラインフォントを調べる

Courier とほぼ同じデザインでアウトラインフォントである Courier 10 Pitch で仕組みとデザインをみてみます。

アウトラインフォントの Courier 10 Pitch

pt 8 10 12 14 18 24 32
本来の大きさ
4倍に拡大

ビットマップフォントの Courier (再掲載)

pt 8 10 12 14 18 24 32
本来の大きさ
4倍に拡大

アウトラインフォントの間違い

次の認識は間違いです。

間違い1:データを線で持っているのでギザギザが無くきれい

最終的に表示される時はビットマップと同じにピクセルで表されますからギザギザが無くなるわけではありません。ビットマップでは大きなフォントが用意されていないために無理に拡大するとギザギザが拡大されて目立つということなので、大きなフォントをビットマップで用意すれば同等のきれいさを得ることができます。

特に小さな文字はアウトラインフォントでは返って汚くなりがちです。アウトラインフォントの中には小さい字のために内部にビットマップデータを隠し持っている場合があります。

間違い2:ビットマップでは線の太さの変化を表現できない

大きなフォントをビットマップで用意すれば同等に表現できます。ビットマップは線の太さの違いなどを表現できないような小さな文字に使われることが多いので細かな変化を付けられないだけです。

間違い3:アウトラインフォントは色の濃さも使う

上記の例では黒の他に灰色の部分がありギザギザの解消に一役買っています。小さい文字ではこれがないとつぶれて読めないことがありますが、色の濃さを使わないアウトラインフォントもあり得ますし、逆に灰色の部分を持つビットマップを作ることもできます

間違い4:アウトラインフォントはデータ量が多い

小さなフォントだけならビットマップの方がデータ量を少なくできます。しかし大きなフォントを品質を保って作るとなるとアウトラインの方が少なくできます。ビットマップは大きさが2倍になるとデータ量は4倍になります。しかも拡大・縮小をすると品質が落ちるのでいろいろな大きさのフォントをたくさん作る必要がありますのでアウトラインフォントと同じ品質で大きな文字を自由な大きさの字を作れるようにするにはビットマップの方がデータ量が多くなります。

確かに実際のビットマップフォントのファイル容量がはあアトラインフォントより小さいですが、これは大きなサイズの文字を入れていないことと、灰色の部分がなく白か黒かであることによります。

間違い5:アウトラインフォントは表示に時間がかかる

確かにアウトラインフォントは輪郭データと大きさから計算してビットマップにあたるデータを作り出してから表示しますから、ビットマップの方が表示が速そうです。小さな文字ではそれは揺るぎません。しかし大きな文字になるとビットマップでは文字のデータが大きくなり全部をあらかじめメモリ上に用意することができなくなる可能性があります。この場合ハードディスクなどに読みとりに行くことになりますがこれはかなり時間がかかる作業になります。こういう状況では一概にアウトラインフォントは表示に時間がかかると断言できません。