打上下面的补丁可以让MacType修改系统的DirectWrite设置,
关闭DirectWrite使用的Grid-fitting,让高DPI下字体显示变好看。
效果Win10
Edge打补丁前
Edge打补丁后
背景说明
1. 因为中文字笔画很多很复杂,当小字体的时候能使用的像素点很少,
像素不够多描绘出所有的笔画,字体会黏成黑黑的一团无法分辨,
所以这时候必须要省略一些笔画细节,将字体扭曲变形,
以有限的像素点来呈现原本字体大略的形象,才能让人看得懂显示的是什么字。
这个包含在字型里,告诉渲染引擎要省略哪些笔画(像素点)的资讯,
称为Hinting,在ClearType、DirectWrite底下就是由Grid-fitting这个功能来完成的。
2. 然而现在萤幕的分辨率越来越高,人们通常使用高DPI来显示字体,
在大号的字体下,已经有足够多的像素点来显示所有的中文笔画,
所以省略笔画的Hinting已经没有必要,而且有一些字体附带的Hinting讯息效果不好,
加上Hinting后字体反而残缺不全,高低不齐,变得非常难看。
3. 所以之前人们提出了二种方法来解决这个Hinting的问题。
第一个方法是去掉字型本身附带的Hinting资讯,改造成没有Hinting的字型,
用来替换掉原本的系统字型。
这个方法的缺点是使用传统GDI渲染的应用使用这个字型时,显示效果会非常惨烈。
第二个方法是修改字型里面的GASP表格,
让使用DirectWrite渲染的应用不会读取字型内建的Hinting讯息,
但是GDI应用则不受影响,就不会有第一个方法的缺失。
不过这个方法只对本地替换过GASP表格的字型有效,
如果网页使用的是Web Font就一样没辄,
还有在Win7下也没有作用。
4. 微软在Win10 10586以后自己修改了字型的GASP表格,降低了一点点门槛,
让大字号(21px以上)的字体不使用Grid-fitting,
然而...21px的门槛还是太高了,系统DPI要设置为200%才有作用,
而拥有超高分辨率萤幕的使用者目前还不普及,所以这个修改仍然不太实用。
因此只有直接修改系统的DirectWrite设置,
在全域关闭DirectWrite的Grid-fitting,
这样不管用什么字型都不会受到Hinting的摧残,
才能够完美解决Windows字体显示的问题。
现在日本2ch上有一位网友利用开放原始码的MacType,
为MacType加上了可以修改系统DirectWrite设定的功能,
让我们可以利用MacType关闭DirectWrite的Grid-fitting,
在Win10 HiDPI下可以呈现最忠实自然无破坏的字体显示效果。
下载
http://silight.hatenablog.jp/entry/MacTypePatch
按照说明替换MacType的档案
How to use
1. Open MacType directory.
2. Rename or delete EasyHK32.dll and EasyHK64.dll(64bit only)
3. Copy our DLLs and UserParams.ini to MacType directory.
4. Also Copy our DLLs to System directory as below.
32bit
C:\Windows\System32\EasyHK32.dll
64bit
C:\Windows\System32\EasyHK64.dll
C:\Windows\SysWOW64\EasyHK32.dll
Good Luck!
打完补丁后GDI的部分仍然是使用原本MacType(FreeType)的渲染设定,
而使用DirectWrite渲染的程式则会按照UserParams.ini里设置的参数来渲染。
注意事项
1. 这个补丁在Win8.1/Win10下的效果和Win7/Win8是不同的
因为Win8.1/Win10的DirectWrite有关掉Grid-fitting的选项,
而Win7/Win8并不支援这个功能,所以最重要的GridFitMode = 1参数没有作用。
2. 在Win7/Win8下如果要避免Grid-fitting,
渲染模式只能选Outline(RenderingMode = 6),
但是在Outline模式下,调整Gamma值这些参数,还有双向的次像素渲染都会失效,
在DirectWrite+D2D硬件加速下也只能用x轴的灰阶抗锯齿,y轴无渲染效果,
所以抗锯齿的效果会不太好。
效果Win7
IE11打补丁前
IE11打补丁后
修改UserParams.ini
将Win7的渲染模式设定改为 6 = Outline
可以看到原本高低不齐的微软雅黑变得相当整齐,
(例如第一行的“火烧车酿成”的“成”这个字特别扁)
锯齿稍微减少一点,字体稍微变黑一点,
不过最重要的还是高低不齐的字体会变得比较整齐。
3. 对Chrome部分参数设定没有作用
Chrome部分渲染处理是自行处理的,所以无法通过DW设置修改
4. 对Chrome的Flash文字没有抗锯齿的效果
这是已知的Chrome的Bug,要等Chrome修正他的Flash外挂之后才会正常
5. 使用MacTray拖盘加载的渲染方式,结果无法渲染商店应用
本来就是如此,这是正常的,请改用服务加载或者注册表加载
(图等有空再补...)