大家在用gdi++的时候有一个前提一定要明白,这是一个免费的尚在开发中的软件,有很多原因不明的、不完善的地方,严重的可能导致不可逆转的系统崩溃。作者没有能力也没有可能做彻底、完美的测试/调试。使用者完全是自己负责的前提下使用这个软件,出现任何问题作者都没有义务为你解决。接受不了的最好尽快放弃gdi++。
-------------------------------------------------
还有在大家遇到问题的时候请描述的尽量详细。
比如,
操作系统:
截图:
gdi++的版本:
gdi++的配置文件:
gdi++的启动方式:
出错的程序:
出错的内容:
出错的字体:
禁用gdi++时的情况:
等等...总之越详细越好。
【写在前面的】
我半年前就开始使用gdi++了,这是一个日本人开发的免费开源软件,官方版本在2006年8月29
日公布了最后一个稳定版后就停止了更新。(官网:)官方版本的gdi++只能对字体进行256(8位)阶段的灰度渲染,虽然windows在标准清晰模式下用的也是8位灰阶渲染,但是明显gdi++要强过它好多(当然这也是见仁见智,这里仅代表个人观点)。(是官方gdi++的效果图)
・后来又有一些日本的有志者,他们免费地开发了freetype版的gdi++,可以说这才是gdi++真正的飞跃。用linux的朋友对freetype一定很熟悉,它能对字体进行RGB(24位)渲染,虽然windows的cleartype也是24位,但是效果和freetype版gdi++比起来说它惨不忍睹真的一点也不过分。
开发者非常勤奋,这个软件在半年间更新了好几十个版本(当然都是比较小的更新),现在一些明显的问题已经基本被修整完毕,最近一直没有什么更新。所有打算使用这个软件的朋友都应该感谢他/她们!
【RGB渲染与灰阶渲染的区别】
为了让大家直观地了解RGB渲染与灰阶渲染的区别,这里用三幅图片作对比说明:
引用yfengp朋友的Mac桌面秀(),图片里面的字体是华康丽黑。图片全部放大到1000%(十倍)。
75309465yu9.jpg
:(结果自然一目了然。
【gdi++.ini详解与心得】
切入正题,这次使用最新版来作说明。
先到这里下载(没有与开发者沟通过,就不给出直接下载了,请点开链接下载):
下载里面的gdi0717.zip(gdi++主程序)和gdi0730.zip(最新版本freetype.dll),解压到一个文件夹里,记住文件夹的位置(后面要用到)。
启动方法:
1.把程序或者快捷方式拖拽到gdi++.exe里;
2.通过修改注册表的方法使全系统应用gdi++(后面详解)。
gdi++有着非常非常灵活的设置,通过编辑gdi++.ini你几乎可以用它得到任何你想要的(字体)效果:p(同时也有可能伴随着各种问题[han])。
下面打开gdi++.ini,里面有很多可以设置的地方,详解如下:
它的格式有点特别,每一项可以设置的数字显示在该项目名称的上面。
句首加#的行将被注释掉,不会起作用。
_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/
; GDI++の設定ファイル
; 保存時の文字コードはANSI(ShiftJIS)かUnicode(BOMつきUTF-16LE)で。
; Unicodeの方が読み込みが速いかも。
[General]
; 0:Disable 1:Enable
HookChildProcesses=1
【应用到子进程】
——比如你用启动方法1启动了一个winrar,双击里面的一个文本文档,那么下一步被打开的“记事本”程序也会使用gdi++渲染。
・0:禁用;
・1:启用。
; 0:Normal 1:NoHinting 2:AutoHinting
HintingMode=1
【字体微调】
——对字体进行细微调整,以实现比较锐利、不模糊的效果。windows的cleartype就是用的这类技术,弊端是会使字体变形、笔画粘在一起。
下面会有两种情况,
——情况一,当FontLoader=0(在下面)时:
・0:使用字体内部的微调,字体内部没有微调的话就和选1时的效果一样;——情况二,当FontLoader=1(在下面)时:
・1:不使用微调;
・2:用freetype对字体进行微调。
(注:1.下面的选了4或5的时候,就算是某个没有内部微调的字体,在此项设定为0时也还是会被应用微调;2.有内部微调的英文字体在下面的AntiAliasMode选择4或5时,推荐将此项设为0。)
・0和2完全一样,其他同情况一。
; -1:Disable 0:Normal 1:Light 2:LCD(RGB) 3:LCD(GBR) 4:Light-LCD(RGB) 5:Light-LCD(GBR)
AntiAliasMode=2
【抗锯齿模式】
・-1:禁用;
・0:普通的灰阶渲染;
・1:Light模式,由freetype的Reference来渲染;
・2、3:RGB/GBR24位色渲染,转为液晶优化(电浆显示器也能用),2和3的区别在于红绿蓝的排列不同;
・4、5:就是Light模式下的RGB/GBR24位色渲染,最近版本才加入的新功能,推荐使用!4和5的区别在于红绿蓝的排列不同。
; 0-∞
MaxHeight=150
【让freetype处理的最大的字体尺寸,单位是像素,0的话就是全尺寸。】
; 0:Disable 1:Enable
UseMapping=0
【只有在FontLoader=0(在下面)时此项设置才有效。建议选0,选1会占用大量内存,也没看出有什么好处。】
; 0:Disable 1:Enable
FontLink=0
【字体链接】
——当FontLoader=0(在下面)时:
・0:什么都不做;——当FontLoader=1(在下面)时:
・1:使用注册表里的字体链接设置;
・会保持启用的状态,但是所有字体链接的处理会交由WIN32API完成。
・小贴士:字体链接:估计很多朋友都很熟悉了,windows里处理字体的一种技术。拿注册表里的默认设置举个例子,打开注册表的“HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\FontLink\SystemLink”会发现英文字体Tahoma里链接了一些字体,里面有一些是非英文字体,结果就是系统在调用Tahoma时,遇到Tahoma里没有的字符时就会到被链接的字体里去找。
; 0:Disable 1:ini Only 2:ini+Registry
FontSubstitutes=0
【字体替代】
——当FontLoader=0(在下面)时:
・0:什么都不做;——当FontLoader=1(在下面)时:
・1:使用该设置文件最下面的设置;
・2:该设置文件最下面的设置和注册表里的设置一起启用。
・会保持启用的状态,但是所有字体替代的处理会交由WIN32API完成
; 0:GDI32 1:FreeType
WidthMode=0
【字体排列】
——字宽设置。
・0:交还给gdi32.dll处理,有可能出现字体行距过小或者过大的不整齐的现象;
・1:使用由freetype计算出来的宽度来排列字体,虽然会更美观一些,但是某些程序下可能出现混乱。
; 0:FreeType 1:WIN32
FontLoader=0
【字体的载入方法(注意是载入方法,不是渲染方法)】
——上面反复提到的一个设置。
・0:用freetype载入字体;
・1:用windows的绘图核心载入字体。
*很多freetype的设置需要此项选0才能生效。
; 0:New 1:Old 2:Original FreeType Algorithm
BolderMode=0
【粗体字的渲染方法】
——对象字体是没有单独粗体字文件的字体,有单独粗体字文件的字体(如微软雅黑)此项设置不会生效。
・0:使用gdi0440以后版本的渲染方式;
・1:使用gdi0424以前版本的渲染方式;
・2:使用gdi0347以前版本的渲染方式,也就是freetype本身的粗体渲染。
; -1 = disabled 0 = use "GammaValue" 1 = sRGB 2 = alternative
GammaMode=1
【Gamma模式开关】
・-1:关闭;
・0:使用设置的Gamma值(GammaValue);
・1:使用sRGB的Gamma值;
・2:不明
; sRGB ≒ 2.2 CT-Default = 1.4
GammaValue=1.0
【Gamma值】
——只有上面GammaMode=0的时候此项设置才有效。设置的数值可以精确到小数点后面一位。
*注:windows的cleartype的Gamma值是1.4。
RenderWeight=1.0
【字体轮廓】
——数字越大字体就越粗越黑(当字体为黑色时,其他颜色时表现出来的是颜色越深)。
・设置的数值可以精确到小数点后面两位。
Contrast=1.0
【对比度】
——数字越大越锐利,数字越小越发虚。
・设置的数值可以精确到小数点后面一位。
; 0-12
TextTuning=0
TextTuningR=-1
TextTuningG=-1
TextTuningB=-1
【文字边界设置】
——-1时无效(0也是有效的)。
TextTuning是RGB三色全局设置,TextTuningR、TextTuningG、TextTuningB是单独设置RGB三色。
数字越大越强调背景(类似文字边界被侵蚀的感觉),强调背景会有中字体锐利的感觉。
适当降低对比度,提高TextTuning,可以使文字周围的颜色看起来”淡一点“(比如在某些设置下,明明是黑色的字体,看起来却像是”五彩“的)。
再加上RenderWeight,把这三个设置的微妙平衡调节好的话,能得到不输给Mac的效果。
; -32:+32
NormalWeight=0
; -16:+16
BoldWeight=0
【字体粗细的单独调整】
——可以单独设置常规(NormalWeight)、粗体(BoldWeight)状态下的粗细。
・数字越大越粗,负数也有效,可以使字体更细。
; -16:+16
ItalicSlant=0
【字形为斜体时的倾斜加角】
——可以设置字形为斜体时的倾斜加角。正数为右倾,负数为左倾。
・数字越大加角幅度越大。
此项设置仅对没有单独斜体字形的字体有效。
; 0:None 1:Default 2:Light 16:Legacy
LcdFilter=2
【液晶显示器的优化配置】
——不同显示器效果也不一样,需要自己调试。
*只有freetype.dll是2.3.0以后的版本此项设置才生效。
LoadOnDemand=0
CacheMaxFaces=16
CacheMaxSizes=16
CacheMaxBytes=5242880
;CacheMaxBytes=10485760
【字体缓存、内存的设置】
——同样的设置在不同的机器上效果完全不同,所以没有什么“最合理的设置”。
适当设置的话能减少内存占用(当然再怎么少也少不过不用gdi++),并提高gdi++引擎的稳定性。
较低配置的机器请不要把LoadOnDemand设为1,有死机的危险。
#ForceChangeFont=メイリオ
#ForceChangeFont="M+2P+IPAG circle Regular"
#ForceChangeFont=id-懐映体
#ForceChangeFont="SH G30-P"
#ForceChangeFont="SH G30-M"
#ForceChangeFont="ヒラギノ角ゴ6等幅-AquaKana"
#ForceChangeFont="ヒラギノ明朝 Pro W3"
#ForceChangeFont=S2GPうにフォント
#ForceChangeFont="S2G らぶ W4x1"
#ForceChangeFont="S2G らぶ"
【强制使用某一个字体】
——无视所有其他字体,全系统的字体都会被这里设置的字体代替。
・句首加#的行将被注释掉,不会起作用。
[Individual]
;書式: フォント=Hinting,AAMode,NormalWeight,BoldWeight,ItalicSlant,Kerning
メイリオ=0,
SH G30-AA=,,-16,-4
S2G らぶ=,,+32,+4
S2G らぶ W4x1=,,+12,+4
【单独设置某字体】
——格式如上,用逗号隔开,逗号间什么都不写的话就用上面设置好的数值。
[Exclude]
#Marlett
#MS Pゴシック
【除外的字体】
——这里设置的字体不使用gdi++渲染。
・句首加#的行将被注释掉,不会起作用。
[ExcludeModule]
fontview.exe
【除外的程序】
——这里设置的程序不使用gdi++渲染。
・句首加#的行将被注释掉,不会起作用。
[FontSubstitutes]
; 書式1: フォント=代替フォント
; 書式2: フォント,CHARSET=代替フォント,CHARSET
#Arial,0=Times New Roman,0
#MS 明朝=MS ゴシック
【字体替代】
——系统在调用“=”前面的字体时会忽视“=”前面的字体,而去直接调用“=”后面的字体。
・逗号后面的数字是字符编码。
*附:字符编码:
ANSI 0
DEFAULT_CHARSET 1
Symbol 2
MAC 77
日文 128
Hangul 129
JOHAB_CHARSET 130 ※可能是韩文
简体中文 134
繁体中文 136
希腊文 161
土耳其文 162
越南文 163
西不来文 177
阿拉伯文 178
波罗的海地区 186
俄文 204
泰文 222
东欧 238
OEM/DOS 255
_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/
【编辑注册表使系统全局应用gdi++】
最后说一下使用注册表实现系统全局适用gdi++的方法。
复制下面的内容,按你的实际情况重新编辑一下,保存为.reg文件双击导入,重启系统。
编辑的时候注意得使用双斜杠“\\”
_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/
_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/
用注册表导入的方法应用gdi++的话,某些朋友可能会遇到explorer.exe频繁报错的情况,现在还没有确切的解决方案。请尝试把gdi++保存在尽量靠近系统核心区域的的地方,我把gdi++放在C:\WINDOWS\system32里从来没报过错(当然可能不仅仅是因为我把它C:\WINDOWS\system32里所以运行稳定),机器之间的“个体差异”还是有的,再说的深了,可能还有RPWT的影响(玩笑)。调整上面的缓存设置也应该能改善,但是在下能力有限,不知道该怎么调制。实在没办法的话就这能放弃了...
【关于安全软件报警】
gdi++会把原本由gdi32.dll(windows绘图核心)执行的字体渲染工作截取到自己下面,进行渲染。并且程序在应用gdi++的时候,gdi++会采用注入进程的方式启动。对于上述两个动作,一般安全软件都会报警。但是这都是我们用户自己启动的,咱们也都知道会产生什么结果,所以不必担心,把gdi++添加到信任区域吧。我用卡巴斯基的,一开始业报警,添加信任就OK了。
还有什么其他问题的话,就到这里来问吧。
最后补充一句,禁止对本文进行任何形式的全部或部分的转载。
有转载需要的话,请先pm在下,谢谢。