| 
UID2积分8682帖子2905主题199论坛币13045 威望16 EP值2349 MP值15 阅读权限200注册时间2011-8-3在线时间2597 小时最后登录2024-8-28
 
   
 | 
| lijingjie 发表于 2011-11-22 15:14  我刚刚又重新测试了一下,有如下结果:
 
 当is_outline为1时,文字效果如下:(上面一行为ASS, 下面一行为TC ...
 你测试(观察)的很仔细. 恩, 理论上确实会存在一定偏差, 原因:
 
 设置is_ouline为1时, 会事先把"主体"部分挖空, 采用算法 borden_alpha - original_alpha (注意: 文字的边缘部分通常不是完全不透明的), 所以叠加后, 最终的结果为如你测试的那样(不挖空的情况下, 细微地更红一些). 这是TCAS的横向比较.
 
 对于与ASS渲染结果比较, 这个就稍微复杂一些了. 以前我看过VSFilter的一些源代码, 并与X大有过交流, VSFilter的工作原理(字体渲染部分)是, 先把画布(Canvas)拓展为8*8倍大小, 通过函数GetGlyphOutline (Win32 API), 获取文字的像素化信息, (实质上是一张65级灰度图, 灰度等级越高, 抗锯齿效果越好, GetGlyphOutline函数可以获取5级, 17级, 或者65级灰度图), 然后缩小为目标尺寸, 渲染出来.
 
 TCAX使用的字体处理库是FreeType, (VSFilter使用的是GDI自带的), 可以直接获取257级灰度图. 另外, 也不存在放大缩小这个过程. 所以两者渲染结果存在细微偏差是难免的...
 
 
 
 | 
 |