查看文章 |
freetype版gdi++设置文件详解及问题解答
2008-01-11 20:20
大家在用gdi++的时候有一个前提一定要明白,这是一个免费的尚在开发中的软件,有很多原因不明的、不完善的地方,严重的可能导致不可逆转的系统崩溃。作者没有能力也没有可能做彻底、完美的测试/调试。使用者完全是自己负责的前提下使用这个软件,出现任何问题作者都没有义务为你解决。接受不了的最好尽快放弃gdi++。 ------------------------------------------------- 还有在大家遇到问题的时候请描述的尽量详细。 比如, 操作系统: 截图: gdi++的版本: gdi++的配置文件: gdi++的启动方式: 出错的程序: 出错的内容: 出错的字体: 禁用gdi++时的情况: 等等...总之越详细越好。 【写在前面的】 我半年前就开始使用gdi++了,这是一个日本人开发的免费开源软件,官方版本在2006年8月29 日公布了最后一个稳定版后就停止了更新。(官网:http://drwatson.nobody.jp/gdi++/)官方版本的gdi++只能对字体进行256(8位)阶段的灰度渲染,虽然windows在标准清晰模式下用的也是8位灰阶渲染,但是明显gdi++要强过它好多(当然这也是见仁见智,这里仅代表个人观点)。(这里,图里面的iTunes。是官方gdi++的效果图) ・后来又有一些日本的有志者,他们免费地开发了freetype版的gdi++,可以说这才是gdi++真正的飞跃。用linux的朋友对freetype一定很熟悉,它能对字体进行RGB(24位)渲染,虽然windows的cleartype也是24位,但是效果和freetype版gdi++比起来说它惨不忍睹真的一点也不过分。 开发者非常勤奋,这个软件在半年间更新了好几十个版本(当然都是比较小的更新),现在一些明显的问题已经基本被修整完毕,最近一直没有什么更新。所有打算使用这个软件的朋友都应该感谢他/她们! 【RGB渲染与灰阶渲染的区别】 为了让大家直观地了解RGB渲染与灰阶渲染的区别,这里用三幅图片作对比说明: 引用yfengp朋友的Mac桌面秀(原图点这里查看),图片里面的字体是华康丽黑。图片全部放大到1000%(十倍)。 75309465yu9.jpg[谁下载了此文件?] :(结果自然一目了然。 【gdi++.ini详解与心得】 切入正题,这次使用最新版来作说明。 先到这里下载(没有与开发者沟通过,就不给出直接下载了,请点开链接下载):http://free.flop.jp/gdi++/oldsrc/ 下载里面的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:禁用; ; 0:Normal 1:NoHinting 2:AutoHinting HintingMode=1 【字体微调】 ——对字体进行细微调整,以实现比较锐利、不模糊的效果。windows的cleartype就是用的这类技术,弊端是会使字体变形、笔画粘在一起。 下面会有两种情况, ——情况一,当FontLoader=0(在下面)时: ・0:使用字体内部的微调,字体内部没有微调的话就和选1时的效果一样;——情况二,当FontLoader=1(在下面)时: ・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-∞ 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(在下面)时: ・会保持启用的状态,但是所有字体链接的处理会交由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(在下面)时: ・会保持启用的状态,但是所有字体替代的处理会交由WIN32API完成 ; 0:GDI32 1:FreeType WidthMode=0 【字体排列】 ——字宽设置。 ・0:交还给gdi32.dll处理,有可能出现字体行距过小或者过大的不整齐的现象; ; 0:FreeType 1:WIN32 FontLoader=0 【字体的载入方法(注意是载入方法,不是渲染方法)】 ——上面反复提到的一个设置。 ・0:用freetype载入字体; ; 0:New 1:Old 2:Original FreeType Algorithm BolderMode=0 【粗体字的渲染方法】 ——对象字体是没有单独粗体字文件的字体,有单独粗体字文件的字体(如微软雅黑)此项设置不会生效。 ・0:使用gdi0440以后版本的渲染方式; ; -1 = disabled 0 = use "GammaValue" 1 = sRGB 2 = alternative GammaMode=1 【Gamma模式开关】 ・-1:关闭; ; 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三色。 ; -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 ゴシック 【字体替代】 ——系统在调用“=”前面的字体时会忽视“=”前面的字体,而去直接调用“=”后面的字体。 ・逗号后面的数字是字符编码。 *附:字符编码: _/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/ 【编辑注册表使系统全局应用gdi++】 最后说一下使用注册表实现系统全局适用gdi++的方法。 复制下面的内容,按你的实际情况重新编辑一下,保存为.reg文件双击导入,重启系统。 编辑的时候注意得使用双斜杠“\\” _/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/ 代码:
Windows Registry Editor Version 5.00 [HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Windows] "AppInit_DLLs"="C:\\...路径自己改...\\gdi++.dll" 用注册表导入的方法应用gdi++的话,某些朋友可能会遇到explorer.exe频繁报错的情况,现在还没有确切的解决方案。请尝试把gdi++保存在尽量靠近系统核心区域的的地方,我把gdi++放在C:\WINDOWS\system32里从来没报过错(当然可能不仅仅是因为我把它C:\WINDOWS\system32里所以运行稳定),机器之间的“个体差异”还是有的,再说的深了,可能还有RPWT的影响(玩笑)。调整上面的缓存设置也应该能改善,但是在下能力有限,不知道该怎么调制。实在没办法的话就这能放弃了... 【关于安全软件报警】 gdi++会把原本由gdi32.dll(windows绘图核心)执行的字体渲染工作截取到自己下面,进行渲染。并且程序在应用gdi++的时候,gdi++会采用注入进程的方式启动。对于上述两个动作,一般安全软件都会报警。但是这都是我们用户自己启动的,咱们也都知道会产生什么结果,所以不必担心,把gdi++添加到信任区域吧。我用卡巴斯基的,一开始业报警,添加信任就OK了。 还有什么其他问题的话,就到这里来问吧。 |
最近读者: