北京理工大学 20981 陈罡
今天整整用了一下午的时间,总算让libsvg, libsvg-cairo, libcairo, libpixman
等库可以流畅地在symbian s60模拟器上运行了。
这里需要说明一下的是,关于libsvg中使用的xml解析器。它可以使用expat解析器和libxml2的解析器,
对于symbian而言,我们可以很容易的拿到syexpat的源代码。但是能不能直接用在这里呢?答案是否定的。
syexpat虽然做得已经很好了,但毕竟是对原有expat库进行了基于c++类的封装。而目前在libsvg中所采用
的expat是“原汁原味”的。所以还需要做一点修改了,具体的过程很简单,就是要把作者封装了的类去掉,
然后使用expat原本的api函数即可。这里需要特别注意一点的是,syexpat的作者移植expat库的时候,由于考虑到symbian本身内建的字符处理系统是基于unicode的,因此,他把syexpat的配置进行了少许修改,
让expat传递给解析函数的变量字符串都是采用unicode进行编码的。但是做为svg解码器而言,是不需要这个变换的,所以我们需要找到expat_config.h文件,找到如下编译开关:
#define XML_UNICODE
#define XML_UNICODE_WCHAR_T 1
可以把它修改成为:
#undef XML_UNICODE
#undef XML_UNICODE_WCHAR_T
呵呵,这个小bug折腾了我半天,我还纳闷expat怎么会自动支持unicode呢?
模拟器抓图如下:
这张是经过了缩放和旋转以后的老虎图:
这张也是很著名的小狮子:
下班了。。。困死了。。。
最后,贴上一个sis包,请注意,这个是为s60 3rd平台开发的demo程序。需要经过签名才可以安装到手机
上。
sis包(需要自己做sign才能安装,安装路径不限)
|
文件: |
SvgMap.rar |
大小: |
347KB |
下载: |
下载 | |
使用方法:
(1)选择open,在弹出对话框里面选择svg文件,如果没有错误的话,就会全屏显示
(2)数字键“1”代表放大;数字键“2”代表缩小;每次缩放,步长为10个像素
(3)支持如下格式的外部链接图片:
但是要求xlink的图片必需要与svg文件在相同的目录下。另外,xlink的图片最好不要过大,会造成内存
分配失败。
(4)查看完毕后,选择"close"菜单项即可(其实不选择也没关系,这里是做资源释放实验用的)
目前还在做的工作是:
(1)加入旋转功能,旋转后图片是相对左上角坐标(0,0)旋转的,因此,图片定位比较麻烦。
(2)加入对字体轮廓的渲染功能,这一点是在svgt中有所定义的,illustrator中也用这种方式
输出文字,不过要想在symbian上实现这种效果,最好借助于freetype来实现。因此,基于freetype
的backend还在开发中。
阅读(3914) | 评论(2) | 转发(0) |