しらいとブログ

ネットで検索してもなかなか出てこないIT情報を独自にまとめています

「WinFont+」開発記録 Part 6

今回は実験結果を記録として残すのが目的なのでソフトの公開はありません。

WinFont+を開発していく上で、ガンマ補正の問題が出てきました。Direct2Dでガンマ補正ができないことと、GDIでガンマ補正をやるとハードウェアアクセラレーションが効かなくなり遅くなることがわかっています。

そこで、ガンマ補正なしでもきれいに表示できるアンチエイリアシングアルゴリズムを開発することにしました。

まず通常のアンチエイリアスがこちら。

標準アンチエイリアシング

〇ガンマ補正なし

↑これはDirectWriteやFreeTypeで出力した無加工の文字と同じ状態です。

〇ガンマ補正1.8

↑これはDirectWriteやMacTypeでガンマ値を1.8に設定したのと同じ状態です。

上の2枚を比べると、ガンマ補正なしでは白い文字が薄くなり、線の太さがまばらになります。ガンマ補正をすることで線の太さが均一になり、白い文字と黒い文字の濃さもほぼ同じになります。明らかにガンマ補正をした方がきれいです。

ただ、どちらも薄いのが気になります。そこで、濃さを調整してみます。

〇ガンマ補正なし、コントラスト150%

↑これはDirectWriteでガンマ値1.0、EnhancedContrast=50%にしたのと同じ状態です。

〇ガンマ補正1.8、コントラスト150%

↑これはDirectWriteでガンマ値1.8、EnhancedContrast=50%にしたのと同じ状態です。

どちらも線がガタガタになっていて太さもまばらになっています。最初の薄い文字よりは読みやすいかもしれませんが、きれいとは言えません。

このことから、標準アンチエイリアシングはガンマ補正だけするのが一番きれいであり、ガンマ補正をしなかったり、濃さを調整したりすると汚くなると言えます。

MacTypeでは濃さを調整する代わりに太さを調整することで、きれいで読みやすくすることが可能でした。それはガンマ補正があってこそのものです。

次は私が開発した独自のアンチエイリアシングアルゴリズムになります。

自アンエイリアシング

〇ガンマ補正なし

〇ガンマ補正1.8

このアルゴリズムは少しぼやけたような見た目になりますが、小さな文字でも線が途切れにくく、なめらかに繋がって見えるのが特徴です。

たぶん多くの人が「ぼやけた文字は読みづらい」とか「文字と背景の境目がくっきりしている方が読みやすい」とか考えているようですが、私が試した限りでは「線が途切れず繋がって見えること」の方が重要という結論に至りました。

ガンマ補正をしないと白い文字が薄くなるのは相変わらずですが、標準アンチエイリアスと比べてガタガタしにくくなっています。

どちらも薄いので濃さを調整するとこうなります。

〇ガンマ補正1.0、コントラスト150%

〇ガンマ補正1.8、コントラスト150%

濃さを調整してもあまりガタガタしません。若干濃くなりすぎな気がしますがそこは調整可能です。

結局

いろいろ試した結果、WinFont+ではこの独自アンエイリアシングをガンマ補正なしで採用することに決めました。白い文字が薄くなる問題が残っていますが、それは文字色に応じて濃さを調整する機能を付けようかなと思っています。

また、この独自アンエイリアシングを使う場合、FreeTypeのような太さを調整する機能は不要になります。たぶん、FreeTypeを使わずDirectWriteで実装すると思います。場合によっては、GDIはGDIだけで実装するかもしれません。その方がFreeTypeを使うより安定すると思います。