| 
UID2积分8682帖子2905主题199论坛币13045 威望16 EP值2349 MP值15 阅读权限200注册时间2011-8-3在线时间2597 小时最后登录2024-8-28
 
   
 | 
| 说明 
 该例子需要TCAX 1.1.8或更新版本.
 
 tcaxLib.pyd模块的TextOutlineDraw()函数只能处理单个文字. 对于多字符, 我们可以借助util.cairo模块来实现, 要用到TCAX 1.1.8引入的ToAssDraw()函数, 该函数的功能是把cairo路径转换为ASS绘图代码, 与AssDraw()函数相对. 有了该函数, 我们可以利用cairo做更多有趣的事情, 有待用户去发掘.
 
 
 例子
 
 代码如下, 有不清楚的地方直接跟帖好了.
 完整工程见附件复制代码from tcaxPy import *
from util.cairo import *
def tcaxPy_Init():
    global _Fs
    global _Spacing
    global Font
    global surface
    global ctx
    _Fs = GetVal(val_FontSize)
    _FontFileName = GetVal(val_FontFileName)
    _FaceID = GetVal(val_FaceID)
    _Spacing = GetVal(val_Spacing)
    Font = InitFont(_FontFileName, _FaceID, _Fs, _Spacing, GetVal(val_SpaceScale), MakeRGB(0, 0, 0), 0, False)
    fx_width = GetVal(val_ResolutionX)
    fx_height = GetVal(val_ResolutionY)
    surface = ImageSurface(FORMAT_ARGB32, fx_width, fx_height)
    ctx = Context(surface)
    ctx.select_font_face(GetVal(val_FontFaceName))
    ctx.set_font_size(_Fs)
def tcaxPy_Fin():
    FinFont(Font)
def tcaxPy_Main(_i, _j, _n, _start, _end, _elapk, _k, _x, _y, _a, _txt):
    ASS_BUF  = []        # 保存ASS特效
    TCAS_BUF = []        # 保存TCAS特效
    ##### 主要特效编写操作 #####
    dx = _x - int((_a + _Spacing) / 2 + 0.5)         # 一个固定操作, 将an5的坐标转换为an7
    dy = _y - int(_Fs / 2 + 0.5)                     # ASS特效默认采用an5坐标, TCAS特效则采用an7坐标
    # new approach, can handle multiple texts at a time
    ctx.new_path()
    ctx.move_to(0, _Fs + GetVal(val_Descender))
    ctx.text_path(_txt)
    ctx.scale(1 / 64, 1 / 64)
    assDraw = ToAssDraw(ctx)
    ctx.scale(64, 64)
    ass_main(ASS_BUF, SubL(_start, _end), an(7) + pos(dx, dy), '{\\p7}' + assDraw + '{\\p0}')
    # the old fashion, can only handle one text at a time
    assDraw = TextOutlineDraw(Font, _txt, 0, 0)
    ass_main(ASS_BUF, SubL(_start, _end), an(7) + pos(dx, dy) + color1('000000') + color3('00FF00'), '{\\p7}' + assDraw + '{\\p0}')
    ##### 将结果返回给tcax进行处理 #####
    return (ASS_BUF, TCAS_BUF)
 
 
 | 
 
回帖推荐
milkyjing 发表于9楼
 查看完整内容
 本问题已修复, 可以会以补丁的方式放出, 或等下一版本...
------- 2012-05-10 12:26 编辑 ---------
新版已放出 (TCAX 1.1.9 SP1)
将第20行代码 ctx.set_font_size(_Fs)  改成   ctx.set_font_size(CairoFontSize(_FontFileName, _FaceID, _Fs))  即可 
milkyjing 发表于6楼
 查看完整内容
 1.1.9中, 该方法对于一些字体可能会存在问题 (文字大小不相等), 更系统的解决办法要等之后版本了. 临时解决方案是, 目测+推断出一个合适的字体大小, 比如TCC中font size设为40, 则该大小可能为36等... 把这个值填入 ctx.set_font_size() 函数中...即可... |