「Tips & FAQ」の編集履歴(バックアップ)一覧に戻る

Tips & FAQ - (2006/11/29 (水) 20:23:24) の編集履歴(バックアップ)



使い方


FreeType版

  1. うpろだからfreetype.dllをDLする(※)
  2. XPの場合: freetype.dllをgdi++.dllと同じフォルダにコピー
    2kの場合: freetype.dllをPATHの通ったフォルダ(system32とか)にコピー
  3. gdi++.exeに対象exeをドロップして起動
※06/11/15 8:00現在 gdi0299にFreeType 2.2.1のDLLが置いてある。


  • mfdel.exeを使ってManifestを削除すると、XPでも2kと同じ動作にできる。
 もちろんgdi++.dllを上書きする度にmfdel.exeを使う必要がある。

  • VC6又はDDKを使ってCVSのFreeTypeを簡単にビルドできるセットがgdi0231にある。
 VC8以降を使う場合はgdi0236の.makをコピーする。

  • さらに、バッチファイルを実行するだけで全自動でビルドできるセットもある。
 ビルドに必要なcvsやpatchが予め入っているのでVC持ってるならお勧め。
 VC6用: gdi0258.zip (オリジナル)
 VC2003用: gdi0265.zip
 VC2005EE用: gdi0295.zip
※これは「やり方分かってるけど面倒な人向け」の物なので、BATの中身を見て
 何をやるか理解した上で実行すること。

  • 十分なCPU、十分なメモリを積んでいるPC向け豪速化設定の例(自己責任)
 UseMapping=1
 CacheMaxFaces=16
 CacheMaxSizes=4096
 CacheMaxBytes=16777216



FAQみたいなもの


Q. 全てのプロセスにgdi++.dllを適用させたいんだけど。
A. gdippin.exe または gdippManager を使いましょう。


Q. 「DLLの利用に失敗しました。このDLLを一覧から除外します。」と表示されて、gdippManager が使えないよ。
A. gdi++.ini の [General] セクションに UseManager=1 を加えてみましょう。
  freetype.dllを正しい場所に置いてあるか確認しましょう。
  XPの場合: freetype.dllをgdi++.dllと同じフォルダにコピー
  2kの場合: freetype.dllをPATHの通ったフォルダ(system32とか)にコピー


Q. 一部のDynafontやSH G30で描画が変
A. FreeTypeのバグ。まだ直ってない。
  http://na.yuki.st/lily/programming/freetype2_imifu.html


Q. LCDで黄色や水色が目立つ
A. FreeType2.2.2ではサブピクセルレンダリングが改善される予定。


Q. M+2VM+IPAG circleで"0"のボールドが正しく描画されない
A. FreeTypeのバグ。FreeType2.2.2では直っている。


Q. 環境によってはManager使用時にExplorerとかでしばらく有効にならない
A. FreeType版は標準ではCreateFont系が呼ばれるまでAA処理を準備しないため。
  PCの性能が有り余っているならLoadOnDemand=1にしてみるとか。


Q. Tahomaとかで有効にならない
A. フォントリンク。そんなOS依存しまくり機能にFreeTypeは対応していない。


Q. 灰色文字でAAが効かない所がある
A. そういう物。標準AAやClearTypeでも効いてないのでキニシナイ


Q. WordとかIEのプレビューとかで消費メモリ量が500MBとかになる
A. なぜか高さ1000pxのフォントを渡してくるのでMaxHeight=300とか書いて回避。

Q. 環境によってはXPのメモ帳でメイリオとか指定すると異様に重い
A. 1文字描画するのにlpDx=1000とか渡してくるから、幅1000pxのビットマップを
  gdi++内部でBitBltしているため。特にオンボードVGAとかで顕著。

Q. 縦書きに対応していない
A. FreeTypeが対応していない。以下FreeTypeのマニュアルより引用。
  > FT_LOAD_VERTICAL_LAYOUT
  > Load the glyph for vertical text layout.
  > Don't use it as it is problematic currently.

Q. Wordとかのショートカットをgdi++.exeにドロップしても開けない
A. http://www.wac-jp.com/programmers/win32/MsiHelper_GetComponentPath.html
  専用APIかよ・・・変なショートカット作るな(゚Д゚)ゴルァ!!>M$



簡単な各ファイルの説明


gdi++.dll

gdi++.dll は、Windows のシステムファイルの一つ、 gdi32.dll の動作を横取りし、文字描画を担当する API をオーバーライドすることで、フォントの表示品質を改善します。APIが呼ばれると、一度バックバッファに最大4倍のフォントサイズで文字を描画し、それを縮小してから画面に転送します。 Mac OS(Classic) 用の有名なシェアウェアに、SmoothType がありますが、すなわちそれと似たような働きをします。本家より抜粋

gdi.exe

  • gdi++.exe
    仕掛けたい実行ファイルをgdi++.exeにドラッグ&ドロップすると、フックされた状態で起動します。Windows標準のコントロールのフォント描画にも影響が及びます。
  • gdi.exe(トレイ格納型)
    トレイアイコンを右クリックから「DLLディレクトリを開く・INIを開く・有効/無効の切り替え」ダブルクリックで「有効/無効を切り替え」が可能。
    有効にすると実行中の全プロセスに効果が及ぶので注意が必要。適用したくないものは[ExcludeModule]に設定する。
    up0060でEXE, DLLのバージョン情報も表示できるように。
    up0061(gdipp.exe)ではGUIから設定も可能に。
    up0097(gdippManager.exe)はup0060とup0061を併せたもの。

gdi++.ini

  • 設定ファイル"gdi++.ini"を同じディレクトリに置くことで、レンダリングの設定ができます。
    (なくても動きます)
[General]
Quality=1
Weight=0
Enhance=0
UseSubPixel=0
SubPixelDirection=0
MaxHeight=0
ForceAntialiasedQuality=0
[Exclude]
FixedSys
Marlett
メイリオ
[Individual]
Tahoma=3
[ExcludeModule]
iexplore.exe
firefox.exe

  • Quality
    フォントの品質を調節します。
    0:何もしない 1:2倍キレイ(デフォルト) 2:3倍キレイ 3:4倍キレイ
  • Weight
    フォントの濃さを調節します。(n + 1)回重ねて描画します。
  • Enhance
    水平・垂直の輪郭線を強調します。
    0:強調しない(デフォルト) 1:少し強調 2:ふつうに強調 3:強く強調 4:激しく強調
  • UseSubPixel
    簡易サブピクセルレンダリング(ClearTypeもどき)を有効にします。
    0:つかわない(デフォルト) 1:つかう
  • SubPixelDirection
    サブピクセルレンダリングを使うときの、サブピクセルの並び順を指定します。ほとんどの液晶モニタは左からRGBの順にサブピクセルが並んでいますが、たまにBGRの順で並んでいるモニタもあるようです。
    0:RGB(デフォルト) 1:BGR
  • MaxHeight
    スムージングを掛ける最大のフォントサイズを「ピクセル単位で」指定します。
    0:すべてのサイズ(デフォルト)
  • ForceAntialiasedQuality
    WindowsのClearTypeを無視するかどうかを指定します。無視すれば描画が高速になります。
    0:標準の品質(デフォルト) 1:ClearTypeを無視
  • [Exclude]セクション
    標準のレンダラで描画したいフォントを一行に一書体ずつ記入します。フォント名がリストに合致すれば、gdi++.dll は標準のレンダラに描画を丸投げします。ビットマップフォントや、ClearType系のフォントにどうぞ。
  • [Individual]セクション
    指定したフォント毎にWeightを設定できます。
  • [ExcludeModule]セクション
    gdi++.dllを適用させたくない実行ファイルを指定できます。このセクションに記述された実行ファイルにはgdi++.dllが適用されません。

gdi++.ini (FreeType版)


INIの例。FreeTypeの設定は[General]に書いても動作する。

[General]
HookChildProcesses=1
[FreeType]
HintingMode=2
AntiAliasMode=2
ForceChangeFont=
TextTuning=0
TextTuningR=0
TextTuningG=0
TextTuningB=0
NormalWeight=0
BoldWeight=0
ItalicSlant=0
UseMapping=0
UseManager=0
#LcdFilter
=0
CacheMaxFaces=0
CacheMaxSizes=0
CacheMaxBytes=0
[Individual]
メイリオ=0,2
Meiryo=0,
MS Pゴシック=,0,,-5
[Exclude]
Marlett
[ExcludeModule]
fontview.exe

  • HookChildProcesses
 子プロセスにも自動でgdi++を適用

  • HintingMode
 ヒンティングの設定。
 0だとバイトコードインタプリタを使用します
  (フォントに含まれるヒンティングそのもの)。
 1だとヒンティングをしません。
 2はFreeTypeのオートヒンティングを使用します。
※FreeTypeライブラリのバイトコードインタプリタがOFFになっている場合は
 0と2が同等になります。
※一部のフォントではバイトコードインタプリタによるヒンティングを行わないと
 字形が崩れます(例:DF平成ゴシック)。

  • AntiAliasMode
 -1でアンチエイリアスを無効化。
 0なら普通のアンチエイリアス(256階調)をかけます。
 1はLightモードです。FreeTypeのReferenceによるとMac OS Xっぽい描画に
 なるらしい。
 2、3は液晶用。並びが違います。
※1を指定したときはHintingModeは2(オートヒンティング)にしてください。
 Lightモード(1)はノーマルモード(0)と比べて字形の変化が少なくなります。

  • ForceChangeFont
 強制的にそのフォントを使うようになる
 ダイアログが見づらくなるが一時的に特定のフォントで確認したい時に使用する

  • TextTuning、TextTuningR、TextTuningG、TextTuningB
 文字の締まりを良くするようなもの。
 -1を指定すると無効化できる。(注: 0でも有効になっている)
 0-12までの値を指定できます。
 TextTuningはAntiAliasModeが0か1の時に使用します。
 TextTuningR・TextTuningG・TextTuningBはAntiAliasModeが2か3の時に使用します。
※文字と背景の境界を調節し、背景側を文字側に侵食させる(背景を強く出す)ような
 形になっています。より大きな値を指定すると文字がより締まってみえますが
 アンチエイリアスの効果も落ちるので注意してください。

  • NormalWeight
 未対応。現時点で設定しても何も変わらない。

  • BoldWeight
 太字のウェイトを相対値で指定(-16~16)。マイナスにすると細くなる。

  • ItalicSlant
 斜体の傾斜を相対値で指定(-16~16)。

  • UseMapping
 フォント読み取りにMemory Mappingを使う。

  • LcdFilter
 FT_Library_SetLcdFilterに渡すパラメータ。
 0:None、1:Default、2:Light、16:Legacy
 ※CVSの最新ビルド(06/11/14現在)以外では使用しない事。

  • CacheMaxFaces、CacheMaxSizes、CacheMaxBytes
 FTC_Manager_Newに渡すパラメータ。詳細はFreeTypeのマニュアル参照
 ※パラメータチェックしてないので大きな値を設定すると暴走する可能性あり

  • Individual
 フォント別に個別設定する。
 書式: フォント=HintingMode,AntiAliasMode,NormalWeight,BoldWeight,ItalicSlant
 例のように省略可能。その場合は[FreeType]で設定した共通設定が使われる。

  • Exclude
 除外フォント。本家と違って上限は無し。

  • ExcludeModule
 除外モジュールリスト。本家と違って上限は無し。


各ビルドまとめ


gdi++.dll




stable version (gdi++20060927) 2006/09/27 12:00:00
up0004 (sse2/pentium4用に最適化したもの) 2006/09/27 15:17:51
│└up0009 (PentiumM(Banias or later) 2006/09/27 16:21:34
│ └up0011 (デバッグビルド) 2006/09/27 16:36:02

up0012 (フォントごとにウェイト指定) 2006/09/27 16:44:08
│└up0017 (up0004lzh+individualセクション有効化) 2006/09/27 18:48:09
│ └up0018 (0017+version+allgdi) 2006/09/27 19:26:38

up0019 (20060927版+バージョンリソース付きdll+730のallgdi++) 2006/09/27 20:37:08

up0021 (最適化ビルド+いろいろ) 2006/09/27 23:30:01
│└up0025 (up0021+953+951+最適化) 2006/09/28 02:13:32
│ └up0049 (up0025+194+ソース分割) 2006/09/29 01:51:55
│  └up0052 (up0049 修正版) 2006/09/29 03:46:30
│   └up0056 (up0052 改変(ソースのみ)) 2006/09/29 12:43:45

up0023 (キャッシュ周りをマルチスレッド化) ExcludeModuleなし 2006/09/27 23:46:43
│└up0027 (944 をベースにソースを整理してみた。) 2006/09/28 02:31:14

up0075 (20060927+allgdi+ExcludeModule+TLS) 2006/09/30 01:01:43
│└up0076 (up0075のズレるバグ修正) 2006/09/30 12:26:32
│ └up0079 (20060927+allgdi+ExcludeModule+TLS その2) 2006/09/30 15:39:26
│  └up0105 (1bit+アルファブレンド(注:要SSE2、きわめて未完成)) 2006/10/04 11:55:16
│   └up0109 (up105のSSE無し版) 2006/10/05 00:19:13

up0107 (up0104-エンハンスフィルタの改良版-のバグ修正) 2006/10/04 12:40:27
│└up0112 (MMX対応など) 2006/10/05 07:43:09

up0139 (FreeType2 MS Pゴシック 16ピクセルのみ) 2006/06/10/23 20:11:47


gdi++.dll FreeType版



gdippManager


その他






gdi++.ini推奨設定


[Exclude]セクション

メイリオ
Meiryo
Marlett
System
FixedSys
Modern
MS Sans Serif
MS Serif
Roman
Small Fonts
Script
Courier

Terminalも?



[ExcludeModule]セクション

fontview.exe
目安箱バナー