zoukankan      html  css  js  c++  java
  • 直读TTF的进展(轮廓信息完成,进入2D阶段,50%)

    Z5`6QFYZ0`6M33JE~8)8)U5正确含曲线(2010.5.8日凌晨三点取得此进展)image不含曲线。(2010.5.5日凌晨四点取得此进展)

    黑体的字体没有一个用曲线的。突然想到了微软雅黑,不含曲线生成也快些,下次用微软雅黑看看。

    做了很多测试,主要是纳闷在truetype曲线格式的描述上,资料太少了,做过的那些同志都是一笔带过,没有人详细解析一下,truetype那一长串不再曲线上的点应该做何解释。我现在是对于一串的,就按照二阶贝塞尔的要求,按照 012 234 456 这样的顺序来绘制曲线。

    得空还得去研读一下freetype的源代码,看是不是这么回事儿,至少现在这个视觉是对的。

    使用方法如下,先是从文件中获取一个字模

    image

    Render2Path过程,从字模信息建立一个FontCurveList对象。

    然后Render,最后取出pathlist,就是点列表了,直接用这些信息创建VertexBuffer就可以了。

    Render参数传入的是细分贝塞尔曲线的距离,我是采用一个按照曲线长度去细分,比如传入0.2,就是在一条曲线上每0.2距离创建一个顶点。实际上传0.2分的过于细小了,会产生大量的顶点。

    freetype默认的绘制空间都是相当大的。具体的尺寸可以看FontCurveList里面的FontSize成员,至于传入的那个'’干’,是个冗余参数,忘了删掉。

    image

    下一步就是再设计一个CLFont_Render2Texture.

    历史 (from 2010.5.2,每天都到凌晨三四点)

    错误结果N[V1~V7%%TM$8K7TKJ7`%PC  G(]TC_`755O_6]7`C[KNKC5

    这个主要是曲线绘制的问题,没有把每段曲线分开绘制。而且truetype的第0个点完全就是为了标位置的,不参与绘制。就正确了。

    但是我用simsunb.ttf怎么也输出不了一个正常的汉字,都是些极为生僻的。

    一开始我以为我cmap表解析错了。查了一晚上,找不出毛病。还顺便查到资料,这个字库的cmap表使用了一个opentype的cmap format12扩展,用USC-4的。

    辛苦了半天手写了Utf-8到USC-4的转换,WP7 SDK 的UTF32不让使用,有些奇怪。后来发现simsunb.ttf的cmap表里记录着0x20000以后的文字。

    一查是中日韩的不常用字。。。。。。。。。。。。,这原来是一个CJK-B扩展字库。

    人生若梦。。。。

    换字库,试了几个小字库有些字会出错,cmap表里会放置一些不存在的字,不知道不存在是不是应该去找宋体。

    然后找了厚道的老牌黑体、楷体,终于正常的绘制了出来。

    正确结果

    未命名 image

    用的纯c#,保证可以移植windows phone 7。效率肯定是和unsafe的代码没法比。

    而且发现windows phone 7 环境用的 dotnet framework 3.微软拟累不累啊。

    PC让我用4,Windows phone 7 让我用三,虽然所差不多,但还是得编译一下试试,你这是为了宣传你能创建copy项目很牛嘛?

    我现在就建立了copy版的windows phone 7 项目,随时需要保证代码兼容性。

    字的读取完成了30%吧,如果要用作3D文字已经可以了。但到2D,还有一个过程,还要取得字符的排版信息。

    不晓得微软会不会做个dotnet版本的字体封装,越来越觉得我这是在做微软应该做的事儿。

  • 相关阅读:
    Centos6.5环境中安装vsftp服务
    MySQL数据库的数据备份和恢复(导入和导出)命令操作语法【转】
    linux系统被入侵后处理经历【转】
    Linux lsof命令详解和使用示例【转】
    Oracle 表空间和用户权限管理【转】
    如何在 Linux 中找出最近或今天被修改的文件
    Linux 服务器系统监控脚本 Shell【转】
    1张图看懂RAID功能,6张图教会配置服务器【转】
    简析TCP的三次握手与四次分手【转】
    TCP协议中的三次握手和四次挥手(图解)【转】
  • 原文地址:https://www.cnblogs.com/crazylights/p/1868395.html
Copyright © 2011-2022 走看看