使用技巧
GDI++的精髓在於它的配置檔案的編寫,不同的系統環境、顯示器類型及使用者的視覺習慣都需要不同的配置檔案來實現最後實際輸出效果的最最佳化。
使用GDI++的前提是你使用的是支持灰階渲染的字型,除了系統自帶的幾個中文字型不支持灰階之外,較為流行的方正、華文、華康和漢儀等等中文字型都支持灰階渲染。不要用著宋體卻問我為什麼效果沒變!下文如無特別說明所指均為老版(Freetype版)的GDI++,並非新的“氦”版。
GDI++的安裝這裡就不多講了,下載文末附屬檔案里的自動安裝版雙擊就自動安裝好並設為開機自動載入了。GDI++的安裝唯一要注意的一點是要儘量安裝在靠 近系統核心的地方,即靠近system32資料夾的地方(附屬檔案中的自動安裝版安裝在windows\system32\GDI++目錄下,以下內容也以此 資料夾為例。),雖然官方的文檔並沒有特別說明這一點,但根據網友使用的反饋來看安裝在靠近核心的地方會相對較為穩定,不知道是什麼原因。
載入方式
第一種是手動將要渲染的程式拖到GDI++安裝資料夾中的gdi++.exe上,這樣這個程式的字型就被GDI++所渲染 了。第二種方法是先創建一個gditray.exe的捷徑,然後把捷徑中的目標部分改為C:\WINDOWS\system32\gdi++\gditray.exe "-on",即在原來目標的後面加個空格,然後是"-on"就可以了,把這個捷徑放到開始選單的啟動資料夾里,這樣開機的時候GDI++就會自動開始 渲染了。最後一種方法是註冊表載入法,也是我最推崇的方法,將以下內容寫入記事本:
Windows Registry Editor Version 5.00
[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Windows]
"AppInit_DLLs"="C:\\WINDOWS\\system32\\GDI++\\gdi++.dll"
並保存為GDI++.reg,雙擊導入即可。第一種是為臨時想用用試試的人準備的,無法渲染系統字型。第二種是全局載入,即整個系統都會被 渲染,而且系統托盤中有圖示,可以輕易地停用或者啟用GDI++,隨意地切換多個配置檔案或者重新渲染。但由於啟動資料夾的優先權較低,所以往往要到進入桌面後才啟動,桌面字型會經歷一次由難看到清晰的轉變,當然,在這之前彈出的所有對話框也不會被渲染。那為什麼要推崇用註冊表載入呢?註冊表法也是屬於全 局載入,但他的優先權極高,WindowsXP的“歡迎使用”界面還沒出現它就已經載入了,而且穩定性相當好,當你配置檔案已定,要準備進入長期使用的時 候這種方法是首選。不過缺點是這個鍵值也較為容易被病毒木馬所利用,所以大部分防毒軟體都會對這個鍵值有監控,甚至沒有任何提示直接阻止,像瑞星2008那個LJ。而且更換配置檔案或者修改配置後像查看效果較為不便,想查看效果需要重啟的軟體。
接下來講GDI++配置檔案的編寫,這是我當前所用的Freetype版的配置檔案:
[General]
;配置檔案名稱
Name=fonlan
; 自動掛鈎子進程
; [0:Disable] 1:Enable
HookChildProcesses=1
;字型微調
情況分析
情況一
當FontLoader=0(在下面)時:
;0:使用字型內部的微調,字型內部沒有微調的話就和選1時的效果一樣;
;1:不使用微調;
;2:用freetype對字型進行微調。
;(註:1.下面的選了4或5的時候,就算是某個沒有內部微調的字型,在此項設定為0時也還是會被套用微調;2.有內部微調的英文字型在下面的AntiAliasMode選擇4或5時,推薦將此項設為0。)
;
情況二
當FontLoader=1(在下面)時:0和2完全一樣,其他同情況一。
HintingMode=2
;抗鋸齒方式,將此值設的過大的時候可能反而會變得五彩、看起來更費勁,GammaCorrection=1時無效。
; -1:Disable [0:Normal] 1:Light 2:LCD(RGB) 3:LCD(GBR) 4:Light-LCD(RGB) 5:Light-LCD(GBR)
AntiAliasMode=4
; 交付 gdi++ 處理的最大尺寸(單位為像素)
; 可調範圍0~2147483647,0表示全尺寸
MaxHeight=300
;只有在FontLoader=0(在下面)時此項設定才有效。建議選0。
UseMapping=0
;字型連結
; 0:Disable 1:Enable
;當FontLoader=0(在下面)時:
;0:什麼都不做;
;1:使用註冊表里的字型連結設定;
;當FontLoader=1(在下面)時:
;會保持啟用的狀態,但是所有字型連結的處理會交由WIN32API完成。
FontLink=1
;字型替代
; 0:Disable 1:ini Only 2:ini+Registry
;當FontLoader=0(在下面)時:
;0:什麼都不做;
;1:使用該設定檔案最下面的設定;
;2:該設定檔案最下面的設定和註冊表里的設定一起啟用。
;當FontLoader=1(在下面)時:
;會保持啟用的狀態,但是所有字型替代的處理會交由WIN32API完成
FontSubstitutes=2
;字寬設定
; 0:GDI32 1:FreeType
WidthMode=0
;字型載入方法
; 0:FreeType 1:WIN32
FontLoader=1
;粗體字的渲染方法(只對沒有單獨粗體字檔案的字型有效)
; 0:New 1:Old 2:Original FreeType Algorithm
BolderMode=0
;Gamma模式開關
; -1 = Disabled 0 = Use "GammaValue" 1 = sRGB 2 = Aternative
GammaMode=0
;Gamma值(只有上面GammaMode=0的時候此項設定才有效。精確到小數點後一位。)
GammaValue=1.4
;字型輪廓
;數字越大字型就越粗越黑(當字型為黑色時,其他顏色時表現出來的是顏色越深)。精確到小數點後兩位。
RenderWeight=1.5
;對比度
;數字越大越銳利,數字越小越發虛。精確到小數點後一位。
Contrast=1.5
;RGB三色全局設定
; 取值範圍0~12,-1時無效
TextTuning=0
TextTuningR=-1
TextTuningG=-1
TextTuningB=-1
;字型粗細的單獨調整,數字越大越粗,負數也有效,可以使字型更細。
NormalWeight=0
BoldWeight=4
;取值範圍-16~+16
;字形為斜體時的傾斜加角
;可以設定字形為斜體時的傾斜加角。正數為右傾,負數為左傾。數字越大加角幅度越大。
;此項設定僅對沒有單獨斜體字形的字型有效。
ItalicSlant=0
;液晶顯示器的最佳化配置
;0:None 1:Default 2:Light 16:Legacy
LcdFilter=2
;陰影設定
Shadow=1,1,6
;字型快取、記憶體的設定
LoadOnDemand=1
CacheMaxFaces=32
CacheMaxSizes=32
CacheMaxBytes=10485760
;強制使用以下字型為系統界面字型
#ForceChangeFont=SIMSUN
[Individual]
順序格式=Hinting,AAMode,NormalWeight,BoldWeight,ItalicSlant,Kerning
Tahoma=1
MingLiU=1
PMingLiU=1
微軟雅黑= 3
Lucida Grande = 1
MS Shell Dlg = 1
MS Shell Dlg 2 = 1
[Exclude]
;不渲染的字型列表
FIXEDSYS
Marlett
[ExcludeModule]
;排除的程式列表(gdi++.dll依然會注入以下進程,但不會生效)
imejpmgr.exe
msdev.exe
devenv.exe
winlogon.exe
fontview.exe
SREngPS.EXE
cstrike.exe
xdict.exe
CppIDE.exe
nvsvc32.exe
services.exe
csrss.exe
lsass.exe
svchost.exe
wmiprvse.exe
Safari.exe
spoolsv.exe
ctfmon.exe
scardsvr.exe
conime.exe
SynTPEnh.exe
RTHDCPL.exe
smss.exe
agrsmsvc.exe
oobechk.exe
jqs.exe
[FontSubstitutes]
字型替換
Microsoft Sans Serif=SimSun
System=SimSun
情況三
主要就是GammaValue、RenderWeight、Contrast和Shadow這四個參數最為重要,他直接決定了Freetype版GDI++在你的電腦上的表現,而我們的微調也主要是調這幾個參數。
需要注意
GDI++,尤其是Freetype版,雖然字型渲染效果較為出色,但兼容性較差,和很多軟體都有兼容性問題。首先和IE的兼容性問題就不小,使用IE核心的瀏覽器時,遨遊和遨遊2開啟後進入選項沒多久就程式崩潰,世界之窗可以正常運行,但主界面選單字型會變得比較 大(這點其實可以通過把配置檔案中的FontLink值改為0來修正),但可以在設定中制定主界面所用字型及字 號。Firefox和Opera與GDI++完全兼容。所以在GDI++環境下瀏覽器最好選擇非IE核心的,如果一 定要使用IE核心建議使用世界之窗2.0。
GDI++和魔獸世界的小地圖有衝突,因為魔獸的字型也使用了同樣的字型渲染方式。解決方法是使用gditray載入方式,在啟動魔獸世界之前關閉GDI++渲染即可。
還有一個比較嚴重的問題是QQ比較容易崩潰,操作的時候一不小心QQ可能就崩潰了,解決的方法要么把QQ加入GDI++的排除列表,要么把 FontLoad改為1,但全局渲染效果會變差,要么就小心使用,忍受這顆不定時的炸彈,但最徹底的解決方案還是使用氦版的GDI++,QQ不會出現崩潰的情況。
GDI++對迅雷的支持也有限,雖然不會造成迅雷的崩潰,但迅雷一旦開始下載,GDI++便無法渲染迅雷的界面了,不知是什麼原因。
工作方式
是注入到所有正在運行的進程下,攔截所有原本由系統的gdi32完成的字型渲染工作。這兩個行為都是極有可能被防毒軟體所誤報的,所 以請務必把gdi++添加到防毒軟體的可信任程式列表,否則他是無法工作的。還有通過註冊表全局載入的時候,由於使用的是 HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Windows項下的AppInit_DLLs來實現開機自動載入,但由於這個鍵也是病毒木馬常用的啟動項,所以幾 乎所有的安全軟體都會對這個鍵有所監控,請在安裝前先關閉安全軟體,否則可能出現無法導入註冊表的情況。
配置檔案
:一種是把配置檔案直接保存成gdi++.ini,放在GDI++的安裝目錄下,優點是目錄結構簡單、清晰,建議使用註冊 表全局渲染時使用。缺點是只能使用一種配置檔案,使用Gditray載入時無法在右鍵中切換配置。另一種方法是在GDI++的安裝資料夾中新建一個名為 ini的資料夾,將所有的配置檔案放在此資料夾下,然後GDI++安裝資料夾下的gdi++.ini按如下格式編寫:
[General]
AlternativeFile=.\ini\藍楓冰月.ini
[GdiTray]
MultiINISelector=1
RedrawDelay=50
CoolMenu=1