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

Tips & FAQ - (2006/11/02 (木) 00:55:04) の編集履歴(バックアップ)




簡単な各ファイルの説明

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版)


オプション一覧
[General]
HookChildProcesses=1
[FreeType]
HintingMode=1
AntiAliasMode=2
EnableKerning=0
#ForceChangeFont
=MS Pゴシック
TextTuning=0
TextTuningR=0
TextTuningG=0
TextTuningB=0
CacheMaxFaces=0
CacheMaxSizes=0
CacheMaxBytes=0
[Exclude]
Marlett
メイリオ
Meiryo
[ExcludeModule]
fontview.exe

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

  • ForceChangeFont
    強制的にそのフォントを使うようになる
    ただしこれ使うとダイアログがとんでもない事になるので注意

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

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

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

  • [FreeType]セクションで色々設定できる。
    ([General]セクションでも設定できるように3px:693氏が変更)

  • HintingMode
    ヒンティングの設定。0だとバイトコードインタプリタが(ONにしてFreeTypeをコンパイルしていた場合)使われるんじゃないだろうか。
    1だとヒンティングをしない。
    2はFreeTypeのオートヒンティング。

  • AntiAliasMode
    0なら普通(256階調)
    1はLight。FreeTypeのReferenceによるとMac OS Xっぽいとか。
    2、3は液晶用。並びが違う。

  • EnableKerning
    0だと文字詰めなし
    1だと文字詰めあり

  • TextTuning
    文字の締まりを良くするようなもの(これも下記サイトから)

FreeType2を使ってレンダリング(by 3px:555)
http://hp.vector.co.jp/authors/VA028002/freetype.html
を全面的に参考にした(Thanks higambana)



各ビルドまとめ

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

gdi0143 (up0133をコンパイルした物) 06/10/27(Fri),01:06:51
gdi0152 (gdi0143 + FreeType = gdi0149 の修正版) & gdi0151 (FreeType DLL版)06/10/28(Sat),11:31:50
 └gdi0156 (gdi0152の修正版)06/10/28(Sat),17:39:45
  └gdi0164 (gdi0156の修正版)06/10/28(Sat),17:39:45
   └gdi0170 (gdi0168修正版)06/10/29(Sun),13:19:49
    ├gdi0172 (gdi0170ベース+何か)06/10/29(Sun),14:12:49
    │└gdi0177 (gdi0172+カーニングオプションと文字サイズの何)06/10/29(Sun),22:28:35
    │ └gdi0181 (gdi0177の修正)06/10/30(Mon),03:53:58
    │  ├gdi0193 (gdi0181修正版)06/10/31(Tue),19:06:05
    │  ├gdi0202 (gdi0181+gdi0195+gdi0198)06/10/31(Tue),23:10:04
    │  └gdi0206 (gdi0181+...)06/11/01(Wed),06:53:30
    │   └gdi0216 (gdi0209修正+機能追加)06/11/01(Wed),23:13:25
    └gdi0173 (manifest付きgdi0172)06/10/29(Sun),21:25:04



gdi.exe, gdi++ GUI





サービス





gdi++.ini推奨設定


[Exclude]セクション

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

Terminalも?



[ExcludeModule]セクション

fontview.exe
目安箱バナー