- UID
- 2
- 积分
- 8682
- 帖子
- 2905
- 主题
- 199
- 论坛币
- 11740
- 威望
- 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() 函数中...即可...
|