- UID
- 2
- 积分
- 8682
- 帖子
- 2905
- 主题
- 199
- 论坛币
- 11739
- 威望
- 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级灰度图. 另外, 也不存在放大缩小这个过程. 所以两者渲染结果存在细微偏差是难免的...
|
|