Windowsで綺麗なフォントレンダリングを実現する「gdi++.dll」 211
ストーリー by GetSet
メイリオの滑らかさがXPでも欲しい人へ 部門より
メイリオの滑らかさがXPでも欲しい人へ 部門より
Meth610曰く、"すでに窓の杜などでも記事になっているが、gdi32.dllのTextOutやExtTextOutなどの関数をフックして、対象となるアプリケーションで高品位なフォントレンダリングを行う「gdi++.dll」が公開された。現在、作者のページからソースコードと共にダウンロードできる。"(続く…)
"このdllは、2ch「WindowsのフォントスレッドVer.16」において、Windowsにおけるフォントレンダリングの汚さに業を煮やしたユーザーがオープンソース形態で開発を始めたもの。
当初は対象アプリケーションのバイナリを直接書き換えて読み込むdllを変更する方法を取っていたが、2006/09/20のバージョンでは同梱のgdi++.exeによりAPIを直接フックする方式に変更され、手軽に効果を試すことができるようになった。使用するフォントにもよるが、Webブラウザやエディタなどに使用すると見違えるように美しいレンダリングが得られる。ただ、現在のところこのdllは開発版であり、表示やその他の動作に不具合が出るアプリケーションも少なくない。
そのほかの特徴としては、
- フォントのヒント情報を(ほぼ)無視して描画することになるため、Windows Vista標準搭載である「メイリオ」などのClearType用フォントには向かない。
- 標準のgdi32.dllによる描画に比べ、処理が重い。
- 設定ファイルにより、描画の濃さや精度、処理から除外するフォントなどを指定できる。
- Windows XP SP2のgdi32.dllを元にしているため、他バージョンのOSでは動作しない可能性がある(未確認)。
Windows Vistaでもフォント関連のレンダリングエンジン自体は改良されていないらしいので、タレコミ人はこのdllにかなり期待しております。オープンソースということなので、/.jの諸兄も開発に参加してみてはいかがでしょうか(それとも皆さん硬派にビットマップフォント?)。"
好き嫌いが分かれそう (スコア:5, 興味深い)
文字がぼやけて見えるので好きじゃないって人も多そう。
おそらく、(液晶じゃなく)CRTを使っているとか、非常に解像度が
高くて画面を見たときに個々のピクセルが意識されないなんて
場合には、有効なんでしょうね。
Re:好き嫌いが分かれそう (スコア:5, 参考になる)
逆に高解像度で各文字のピクセルを稼げる環境では、ぼんやりするというデメリットのほうが大きくなるだけかもしれません。
Re:好き嫌いが分かれそう (スコア:2, 興味深い)
X68000用に作られた12x12ドットの要町フォント [vector.co.jp](利用例 [geocities.com])
HP95LX用に作られた8x8ドットの恵梨沙フォント [vector.co.jp](利用例 [vector.co.jp]
など。
X68000はDOSのようなテキストコンソール機でしたが、ビットマップディスプレイで表示しているため、フォントを自由に変えることができました。そのため、ユーザーの手でさまざまな手作りフォントが発表されています。
HP95LX/100LX/200LX は画面解像度が低いので、「できるだけたくさんの文字数を表示したい」という切実な要求によるもの。
X68000は標準で24ドット/16ドット/12ドットの文字表示が可能なものの、
12ドットフォントは(大きいフォントを機械的に2値で縮小したため)あまり品質が良くありませんでした。(そのため、手作りフォントが出てきたわけです)
当時、私はアンチエイリアスによる縮小フォント表示をいろいろ遊んでいたのですが、読みやすさでは、
・小サイズ表示専用に作られた2値ビットマップフォントによる表示
・大サイズフォントをアンチエイリアス処理縮小した多階調フォントによる表示
・大サイズフォントを機械的に縮小した2値ビットマップフォントによる表示
を比べた場合、断然
手作り2値フォント >> 機械的多階調フォント >> 機械的2値フォント
でした。この差は歴然です。
機械的2値フォントは、つぶれて読めない文字が多々あるのに対し、
機械的多階調フォントは、ほとんど文字が判別可能です。ですが、文章を読もうとした場合「文字を判別する」という1ステップ入ります。
手作り2値フォントでは、文章もすらすらと読むことができました。
この上の段階としては、「手作り多階調フォント」というのもあり得ますが、日本語は文字数が多いですから、手間的に難しいものがあるでしょうねぇ…
Re:好き嫌いが分かれそう (スコア:5, 参考になる)
ユーザからものすごい不評を食らって、すぐにはずしました。
このほうがいいと言ってくれた人はいませんでした……
Re:好き嫌いが分かれそう (スコア:3, 参考になる)
>文字がぼやけて見えるので好きじゃないって人も多そう。
実際に、今はともかく昔のMicrosoftの中の人も、そう考えていたからこそああいう描画エンジンになっているのじゃないかと思います。
確証とはならないのですが、私がそう思う根拠は、(英語記事で申し訳ない)1991~1994年までExcelのProject Managerをしていた人 [wikipedia.org]が書いているBlogに、Three Wrong Ideas From Computer Science [joelonsoftware.com]という題名でAnti-aliased textはwrongだって書いているからです。
曰く「アンチエイリアスをかけた文字列を見ると、ぼやけて見える。(If you try to read a paragraph of antialiased text, it just looks blurry.)」だそうで。
ただフォローもしていて、ヘッドラインやロゴにおいては、アンチエイリアスは素晴らしいテクニックだ(anti-aliasing is still a great technique for two things: headlines and logos, where the overall appearance is more important than the sustained readability;)とも言ってますが。
MSにとっては大分前の人だし、Windowsのチームでもなかったわけで、同じ考えでWindowsもああなっているかは分かりませんが…元中の人ですから、同じ考えを持っている人も少なくないのじゃないかと推測しますが、どうでしょう。
# ちなみにコレの日本語訳もあるのですが、一部 [joelonsoftware.com]を除くと書籍のみ [ohmsha.co.jp]なのです…。
違和感を乗り越えると初めてクオリティが分かる (スコア:5, 参考になる)
Dances with Wolves (スコア:1)
今まで見慣れていたものへの違和感が生じる場合があります。
これは「ダンス・ウィズ・ウルブズ体験」といって、一概に
否定すべき現象ではありません。
Re:違和感を乗り越えると初めてクオリティが分かる (スコア:2, 参考になる)
全くもってその通り。
俺も匿名掲示板初心者の頃はこんなクソ長文をマジメに読んで、意図を読み取ろうとしたり、腹を立てたりしてた。
今では普通にスルー出来るようになって、とても快適。
Re:好き嫌いが分かれそう (スコア:3, 参考になる)
この経験から、最近のX11環境の文字とかWindowsのClearTypeな表示とかを使うと、「朝から疲れ目かよ」と感じます。
つまりそういう状態をぼやけてみえると言っているわけです。
サブピクセルレンダリング設定だと赤や青が滲んで見えるし。
#ピクセルで構成されているのが解っているからぼけた感じがするのかもしれないけど
#ピクセルで構成されているって明らかに解る解像度なんだからそれでいいんじゃないかなと思うのだ。
Re:好き嫌いが分かれそう (スコア:2, 参考になる)
ClearTypeは原理的には、色なんかつけてませんし、ぼやかすわけでもありませんよ。
液晶では1ドットの表現が内部的には赤緑青の三ヶ所に分かれているから、
[黒][白][黒]ってドットは実際には
[黒][黒][黒][赤][緑][青][黒][黒][黒]
って光ってます。
ここで、[青][黄][黒]って光らせると
[黒][黒][青][赤][緑][黒][黒][黒][黒]
になる。これは、色の並び順は違いますが、[黒][白][黒]を1/3ドット左にずらしたものになり、
人間の視覚上は(通常の[赤緑青]が白い点に見えるのと同じように)白い点に見えます。
つまり、デジタルなデータ上では色がついていますが、
液晶表示を人間が視覚する上では、色はついていません。
くっきりとした白黒のドットを、横方向には1/3ドット単位でずらして表現できる = 横方向の解像度が3倍増えたようになるわけです。
ま、実際にはドット内の赤緑青の間隔と、ドット間の間隔が等しくないために、色ズレが見えてしまいますが…
Re:好き嫌いが分かれそう (スコア:3, 参考になる)
Re:好き嫌いが分かれそう (スコア:1, 参考になる)
Windows のアンチエイリアスをかけたフォントレンダリング(「次の方法でスクリーンフォントの縁を滑らかにする」)には
「標準」と「Clear Type」の2種類があるわけですが、
この「標準」と比べて「Clear Type」はどうなるのか、という原理的なところについて書いたつもりでした。
実際には、「Clear Type」を選ぶと中間調による描画を行うのはご指摘の通りです。
Re:好き嫌いが分かれそう (スコア:2, 参考になる)
Re:好き嫌いが分かれそう (スコア:2, 参考になる)
そのほかにも、見かけの太さの調整などができますので、太く感じるならば、細めにできますよ。
Re:好き嫌いが分かれそう (スコア:2, 参考になる)
なお主観的評価なんで、参考になりきれないかも。
(ソフトウェア 秀丸)
MS ゴシック 太い
MSPゴシック 太い
HGPゴシックE 極太
HGPゴシックM お?いいんじゃない?
HGSゴシックE 太っ
HGSゴシックM GJ!!
文字のきれいさ (スコア:4, 興味深い)
(ぎざぎざしてない)フォントを作るためにすごくがんばってました。
私はn88basicでアウトラインフォントできないか研究してました。
あと、まぐろペイントとかでいかに流麗な文字をつくるとかがはやって
ましたから、知っている人はなつかしいかも。
6年前ぐらいから、アウトラインであることがwindowsの出現でアタリマエに
なってしまった感があって、どういうわけかドット風フォント(ビットマップフォント)が
サイバーでかっこよい!ということで、そっちを作る人がふえてきました。
意図してかくかくしてぎざぎざした味をだしていたわけです。
今、またシャギーをなくそう!としているのを見ると、一回転してもどってきたな、って
いう不思議な感覚にとらわれます。
自分もフォント作りをやってて、せっかく表示されるならきれいなほうがいいし、
もうすこしこのあたりの環境が豊富になってほしいんだけど、
英語圏の人間がwindows開発のメインである以上、画面上に
「薔薇」とかそんな複雑な文字つぶれるつぶれないをキニシナイ人々には
ことさらわかってもらえないのかもしれないですね。
( ´・ω・`)いままでとこれからを比べる生活
ぱんかれ
直線がぼやける (スコア:2)
書道に例えるなら、墨をつけすぎた筆で細かい字を書いて
滲んでしまった状態、とでも言いましょうか。
(あるいはエアブラシで文字を描いたような)
墨(黒色)と和紙(白色)の境界がとても曖昧で
細かい白色部分がなおいっそう潰れて見えます。
さらに|や─のような直線ですらクッキリと見えないので、
なおさら読みづらい印象を与えます。
直線は直線としてハッキリと、止め、はね、払いに係る
曲線だけがアンチエイリアスになれば、
もう少し可読性も向上するのではないでしょうか。
And now for something completely different...
Re:直線がぼやける (スコア:2, 参考になる)
Readme.txtの説明にあったgdi++.ini内パラメータのうち
Quality 3:4倍キレイ
UseSubPixel 1:つかう
にすると|と━はかなりはっきり見えるようになりました。
これなら可読性も高く良い感じです。
# 表示速度はかなり落ちますが…
And now for something completely different...
APIフック方法 (スコア:3, 参考になる)
Re:APIフック方法 (スコア:1)
フックの仕方もそんなあくどい方法を使わなくても、SetWindowsHookEx()で十分ですし。
描画がある以上、必ずWindow作成が発生するのでそこでフックする。ロードされたら後はIAT書き換えちゃうのかな?
# ウィルスの類と誤認識されてもしーらないっ
Re:APIフック方法 (スコア:1)
gdi++ではシームレスにフックしていないからその方法を語っただけなのに、ソースを読むと何かわかるの?
実際、ソース読んでみたけどIAT書き換えよりもずっと面倒な方法で実装されてたし。
ACさんこそIATも知らないのに他人を素人呼ばわりしない方がいいよ。
Re:APIフック方法 (スコア:2, 興味深い)
IAT(ImportAddressTableだっけ?)の書き換えだと
gdi32.dllの内部でそのAPIを呼んだ時のフックができない。
(同じDLL内のAPIだからIAT使わず直接CALLする)
私もあまり詳しくないが、これで合ってるかな?
んで、gdi++は一部のアンチウィルスソフトにブロックされてるみたいね。
Re:APIフック方法 (スコア:2)
などでショートカット作ればいいんでは?
僕にもそういう時代がありました。 (スコア:3, 参考になる)
ところが Windows では未だに 10.0 以前のレヴェルでしか anti-alias されなくて、精神的苦痛でしたが、この gdi++ のおかげで、仕事が捗るようになりました。スゴい!
問題点は
縦横のステムがぼやけるのは論外 (スコア:3, 興味深い)
いわゆるMSゴシックExやWindows用Osaka使ったことのある人は分かると思うけど、Windowsのフォントレンダリングは縦横のステムをできるだけソリッドな線で表現しようとするので、見た目のカッコ良さでは劣っても読みやすさという点では実は優れているんだよね。
なんかソフトに関係ない批評ばっかりなので (スコア:2, 参考になる)
現在、WinXP SP2のSleipnirで書き込み中なのですが、
スクロールするとちょっと文字が寸詰まりになったりする
ところがあったりしますが、概ね良好です。
ただ、PentiumM 1GHzノートのオンボードグラフィックでは
表示がかなり「もっさり」です。
フォントはメニューバーや変換候補の文字まで綺麗に見えてるので、
元々貧相なチェックボックスやプルダウンメニューが逆に違和感が(笑)
アンチエイリアスなど飾りです (スコア:2, 興味深い)
最近のトレンドは大画面化だけど、高密度化にももっと注力して欲しい。
一昔前のプリンタと同じ300dpiぐらいあればなあ…。縦横ともに、今の4倍ぐらいぐらいの密度がほしい。
Re:アンチエイリアスなど飾りです (スコア:1)
確かに部分的に文字やアイコンが十分大きくならない所はありますけど、基本的にはフォントの大きさで解決できる部分が多いですし、可読性がかなり高くて好きです。
しかし後継機種があまり出ないところを見ると、やっぱり世間一般的には高解像度というのは重きを置かれないんでしょうね。下手すると量販店の液晶コーナーには画面のインチ数はあっても解像度が書いてなかったりするし…。
やっぱり (スコア:2, 興味深い)
使ってみた感想は「綺麗と言うよりはにじんでる」って感じです。自分の場合、Macのレンダリング見たときにも同じような印象だったので、さんこうにはならないかもしれませんが。
結局ディスプレイの解像度が今の4倍くらい(縦横各2倍)にならないと、細かい文字は満足に表示できないのかなあと言うのが率直な感想です。
映像の話題では「これ以上解像度高くしてどうするんだ」なんて思うのに、フォントのレンダリングに関しては「まだまだ解像度が低いなあ」なんて思ってしまうのが我ながら不思議。
ぶしつけだけど。 (スコア:2, 興味深い)
ほんとのほんとに申し訳ないんだけど。
私、フォントが汚いっていうのがイマイチ実感できない。
たとえばKNOPPIXのフォントはきれいだなぁって思うけど
だからWindowsが汚いなぁとも別に思わない。
クリアフォントでいいんじゃん?とか、
開発者の人が聞いたら噴飯モノの発言をしてみる。
ゴメンナサイ・・・。
これって感性の問題だよね、たぶん。
あとMP3がCDに比べて音質が悪いってのもイマイチわかんない。
そんな私は世間とズレてるんでしょうか?
ラーメン、オーバークロック大好き
Re:ぶしつけだけど。 (スコア:1)
Re:ぶしつけだけど。 (スコア:2, 興味深い)
だそうです。
>斜体も非常に見栄えが悪い
斜体は日本語フォントの苦手とする分野ですね。
- 欧文の斜体はItalic体(筆記体に近い、別の書体)であるのに対して、和文の場合は単なるOblique体(傾けるだけ)になる。
- そのためか、「斜体」をアウトラインとして持つフォントの数自体が非常に少ない(Regular体を描画の際に傾けて、擬似的にObliqueとして表示している)。
- 一方、ビットマップフォントでは擬似斜体が使えない。そのため フォントは斜体専用のビットマップを併せて持つことになる。
MSPゴシックをgdi++に通すことで、小さいサイズでの斜体に最適化されていたビットマップではなく、擬似斜体であるアウトラインが描画されることになり、
これが斜体の見栄えの悪さに繋がっているようです。
解決方法はヒラギノなどの高品位な商用フォントを使うことぐらいでしょうか……
少なくともIPAフォントでは解決できません。
Re:ぶしつけだけど。 (スコア:1)
おそらく、斜体にしてアウトラインフォントが使われたとき上手にアンチエイリアスがかかれば、そこそこきれいに見えるでしょう。
私はMS ゴシックのビットマップ部は良くできていると思うので、画面表示上は別に今のままでいいやと思います。
アウトライン部は個人的にあまりにも不格好に思えるので、レンダリング云々以前に嫌いです。
ひょっとすると、みんな使ってないのかな? (スコア:1, 参考になる)
私は、ClearType を有効にして、ウェイトが軽い OpenType のフォントで表示しています。「平成明朝」に ClearType 用の修正を加えたものです。結構きれいですよ。皆さん試してみてはいかがですか?
……もちろん、こんなことを書いても殆どの方が試せないことは知っています。それは、Microsoftの不備ですね。ビットマップ表示が優先されていることが諸悪の根源でしたっけ。もしかすると、標準の「MS 明朝」のビットマップが無効にできれば十分かもしれません。
知人の Mac OS X の画面をよく見させてもらいますが、高品位フォントを使用していれば、Mac も Windows も、もちろん *BSD や各種 Linux ディストリのマネージャも表示には大差がないことを付け加えておきます。
All your base are belong to us
Re:どうしてなのか分からないこと (スコア:4, すばらしい洞察)
Re:どうしてなのか分からないこと (スコア:4, すばらしい洞察)
・何故かWindowsユーザが全くOSについて不満を持っていないと勘違いする他OSユーザ
・何故か機能の一部についてケチをつけられるとOS乗り換えの話に持っていくWindowsユーザ
Re:どうしてなのか分からないこと (スコア:3, 興味深い)
#そんなラップトップワープロ世代。
「なんとかインチキできんのか?」
Re:どうしてなのか分からないこと (スコア:2, 興味深い)
辿り着いた結論は
「仕事で一日中見るのに、綺麗すぎると余計に疲れる」
でした。
綺麗なフォントだと、字が背景等に溶け込んで見えるんです。
汚い(笑)と、明確に浮いて見える。
ディスプレイの中の情報を拾おうとする時には、その汚さ(違和感)が重要なのかなと思いました。
特に、文章を頭から読むのではなく、斜め読みしたり、ざっと眺めて必要な情報を探すときに違いが大きかったです。
綺麗なフォントに慣れるのに十分な時間が無かったという可能性は否定しませんが。
Re:どうしてなのか分からないこと (スコア:3, 興味深い)
一時期、とある事務バイトで、
という不毛なルーチンワークをしているときに、
・ハンコ押した書類→スキャナ
と、
・ハンコ押した書類のコピー→スキャナ
の、画質の差に悩んだことがあります。
#壮大なストーリ。空転するアイディア。
Re:どうしてなのか分からないこと (スコア:1, オフトピック)
Re:どうしてなのか分からないこと (スコア:1, すばらしい洞察)
フォントをレンダしない、ということでしょうか?
アウトラインフォントを使わない?ということ?
AAのこと?それともサブピクセルレンダリングのこと?
何に憤っているのか、さっぱり理解できません。
Re:どうしてなのか分からないこと (スコア:1, おもしろおかしい)
ヒント:憤ってなどいない
Re:どうしてなのか分からないこと (スコア:1, おもしろおかしい)
Re:どうしてなのか分からないこと (スコア:1)
Mac OS XのQuartzによるレンダリングは奇麗ですよ。
Re:どうしてなのか分からないこと (スコア:1)
自分はどっちもどっちだと思いますし。
哀れな日本人専用 (スコア:5, すばらしい洞察)
英語版 Windows は Verdana, Tahoma が標準フォントなので、アンチエイリアスかけなくてもすごく見やすくて、いつもうらやましいと思う。Excelとかでフォントを変えたり海外のWebサイトを欧文フォントで表示するとよくわかる。
諸悪の根源は日本語MSフォント、あるいはマイクロソフトにMSフォントをOEM供給しているリコー [ricoh.co.jp]。
MacのOsakaやPalmOSのフォントはどんなに小さい字でも潰れずに表示されるようビットマップが用意してあって、ピリオドやカンマには充分な余白があるし、全角/半角英数もはっきり見てわかる違いがあった。それに比べて日本語版Windowsに搭載しているフォントは文字が潰れてもお構いなし。バランスも悪くて印刷しても潰れやすい形状のフォントばかり。MS明朝なんて、もともと縦書き用のフォントを横書きに使ってるから見にくくて当たり前。
フォントレンラダーの性能が充分でなければ標準フォントに高品質なものを使うことで充分回避できる問題なのに、見やすさとか美しさを全く気に掛けていない日本法人 マイクロソフトK.K.の気の効かなさがいらだたしい。
その点、こういうの [microsoft.com]を見ると、米Microsoft Corporation は実によく考えているように見える。
Re:フォントの品質も重要 (スコア:2, 参考になる)
ビットマップを表示させるのでなければ選ぶ意味ないような
Re:オープンソース? (スコア:2, 参考になる)
作者のページの下の方に
gdi++.dll はオープンソースで、信頼の Microsoft Visual C++ 6.0 SP6 でビルドされています。再頒布はどうぞご自由に。ソースを改良した場合は、ぜひフィードバックをお願いします。
と書かれていますので,少なくとも「再頒布は自由」ということだけは明らかです.フィードバックに関して「ライセンス上の義務」と解釈するかどうかはビミョーかもしれません.
Re:Macでよくある事 (スコア:1)
#思わずアンビランスでぐぐって「ああ、救急車のことかー」と納得しかけたのでID
Re:Vista でも困るのか (スコア:2, 参考になる)
その後(ClearTypeに慣れたのち)、ヒラギノOTFの描画を見て衝撃を受け、
早速基本6パック [screen.co.jp]を購入してメイリオをこれに置き換えてしまいました。
Windows上でも OTFのレンダラだけはAdobeTypeManagerが使われるので、
TTF+標準アンチエイリアスよりも自分好みの結果が得られています。