試験運用中なLinux備忘録・旧記事

はてなダイアリーで公開していた2007年5月-2015年3月の記事を保存しています。

Wine 1.1.12におけるフォントのサブピクセルレンダリングについて

Wineのバージョン1.1.12でフォントのサブピクセルレンダリングができるようになっているが、これを使用するには、幾つかの準備が必要となる。
(2010/6/1)バージョン1.2-rc1以上ではデスクトップ上の設定を参照するようになっている。「Wine 1.2-rc1以上のフォントのサブピクセルレンダリングの設定について」を参照。

  1. freetypeのサブピクセルレンダリングサポート
    1. Mandriva Linux 2009.0
    2. Ubuntu Intrepid(8.10)
    3. Gentoo
  2. レジストリ設定
    1. FontSmoothing
    2. FontSmoothingType
    3. FontSmoothingGamma
    4. FontSmoothingOrientation

freetypeのサブピクセルレンダリングサポート

x86_32版freetypeライブラリについて、サブピクセルレンダリングをサポートするようにビルドされている必要がある。
具体的にはfreetype-[バージョン]/include/freetype/config/ftoption.h

#define FT_CONFIG_OPTION_SUBPIXEL_RENDERING

を記述してからビルドするのだが、以下に挙げるディストリのパッケージとして利用する場合は手動でここをいじる必要はない。どうしても手動でビルドして上書きしなくてはならない状況になった場合にのみそれを行う。

Mandriva Linux 2009.0
i586版のlibfreetype6がPLF版である必要がある。PLFのメディアを使用しない場合は公式パッケージのミラーサーバからfreetypeのソースRPMを入手してrpmbuild--define='_with_plf 1'オプションを付けることでPLF版をビルドすることができる(推奨する方法)。
出力されたRPMファイルのファイル名に「plf」が含まれていれば成功で、これをシステムにインストールすればOK。下は作業例(一般ユーザでRPMパッケージの作成ができるような設定が必要)。

$ alias rpmbuild-srpm2rpm-586='linux32 rpmbuild --target i586 --rebuild'
$ rpmbuild-srpm2rpm-586 --define='_with_plf 1' [freetype2-2.3.7-1mdv2009.0.src.rpmの場所]
$ sudo rpm -Uvh --force [RPMパッケージの出力ディレクトリ]/i586/[libfreetype6-2.3.7-1plf2009.0.i586.rpmの場所]

Ubuntu Intrepid(8.10)
Ubuntu Intrepidでは後述のレジストリ設定のみでサブピクセルレンダリングがされた。特に手動のパッケージ再ビルドなどの必要性はない。

Gentoo
手元に環境がないので確認はできないが、パッケージ「media-libs/freetype」のバージョン2系において「bindist」のUSEフラグを付けなければOK。*1
[引用]ファイル名: ${PORTDIR}/media-libs/freetype/freetype-2.3.7-r1.ebuild より

	enable_option() {
		sed -i -e "/#define $1/a #define $1" \
			include/freetype/config/ftoption.h \
			|| die "unable to enable option $1"
	}

	disable_option() {
		sed -i -e "/#define $1/ { s:^:/*:; s:$:*/: }" \
			include/freetype/config/ftoption.h \
			|| die "unable to disable option $1"
	}

	if ! use bindist; then
		# Bytecodes and subpixel hinting supports are patented
		# in United States; for safety, disable them while building
		# binaries, so that no risky code is distributed.
		# See http://freetype.org/patents.html

		enable_option FT_CONFIG_OPTION_SUBPIXEL_RENDERING
		enable_option TT_CONFIG_OPTION_BYTECODE_INTERPRETER
		disable_option TT_CONFIG_OPTION_UNPATENTED_HINTING
	fi

レジストリ設定

WindowsClearTypeと設定は互換*2らしく、Windows上でもClearTypeのチューニングにこのレジストリ設定が使用されるようだ。
Wineのバージョン1.1.12の時点ではWine環境を新しく作っても設定はされないが、今後のバージョンで対応すると思われる。*3
下は設定例のレジストリレジストリエディタで取り込める。
[任意]ファイル名: subpixel.reg

REGEDIT4

[HKEY_CURRENT_USER\Control Panel\Desktop]
"FontSmoothing"="2"
"FontSmoothingType"=dword:00000002
"FontSmoothingGamma"=dword:000003e8
"FontSmoothingOrientation"=dword:00000001

(2009/11/5)ここのレジストリ設定については「winetricksの覚え書き(2009/10/9現在)」にも書いているように、winetricksを用いることで設定の変更が容易に行える(従来方式アンチエイリアス,RGB順サブピクセル,BGR順サブ...の内のいずれかを指定し、設定できる)。
以下は各設定についてのメモ。

FontSmoothing
文字列(REG_SZ)型。0にするとアンチエイリアスが切れる。サブピクセルレンダリングをするには「2」を指定する?
Wineのバージョン1.1.12の時点では「1」でもサブピクセルレンダリングはされたが、Windowsにおいてどうなるかは分からない。

FontSmoothingType

従来型も使えるが、サブピクセルレンダリングを使用するなら「dword:00000002」。

"FontSmoothingType"=dword:00000001

"FontSmoothingType"=dword:00000002

FontSmoothingGamma

  • dword:000003e8(0x3e8)では1000
  • dword:00000578(0x578)では1400
  • dword:00000898(0x898)では2200

フォントのガンマ調整で1000(0x3e8)から2200(0x898)の値をとるらしい。
Wineのバージョン1.1.12の時点では値の変更は全く反映されず、同じ領域のスクリーンショットをファイルに保存したものは全て同一のハッシュ(MD5など)となった。

1000/1400/2200のいずれも上の画像の通り。

FontSmoothingOrientation
サブピクセルの順番の指定で、使用している液晶モニタの並び順に合わせないと綺麗に出ない。
Wineのバージョン1.1.12の時点では

  • dword:00000000(0x0)ではBGR(青-緑-赤)
  • dword:00000001(0x1)ではRGB(赤-緑-青)

となっている。WindowsClearTypeでもこのように動作しているらしい。

"FontSmoothingOrientation"=dword:00000000(BGR)

"FontSmoothingOrientation"=dword:00000001(RGB)

使用したバージョン:

*1:USE="-bindist"でfreetypeパッケージの.tbz2パッケージを作成した場合、それを不特定多数に公開することができないという点には注意が必要

*2:つまり、Wine独自の設定ではない

*3:実は[インストール先]/share/wine/wine.infには「FontSmoothing」の設定は書かれているのだが、他の設定項目(FontSmoothingType)が不足していて結果として利いていないようだ