zoukankan      html  css  js  c++  java
  • 填充完成,开始字体排版和管理

    image

    文字填充最后果然没有想到什么有效地优化形态,回归碰撞检测扫描线方式,老老实实的来。c#的性能果然不负所望,低的可以。
    填充一个猛字,要花30毫秒左右。和像素填充低于1ms的性能差太多。

    排版的问题不是很复杂,以前对freetype很熟悉。之后的管理也已经轻车熟路。

    只是我相应的信息还没有从TTF解析,还有一些解析工作要回头去做。
    优化空间不大,还是先用多线程彻底的避免字模生成过程干扰逻辑。

    其实我已经优化了,本来是有200多毫秒的傲人战绩。

    1.生成线段时采用了很低的曲线拆分精度.

    2.不是逐点测试,一次扫描一行所有的碰撞点,排序后作为线段绘制。

    3.使用简化了的y向扫描判断方法,比判断任意两条线段相交快很多。

    还有一些可能的字模渲染优化点:

    一 float 运算 变成整数运算。因为牵扯斜率。使用了一些浮点数和除法。想办法简化这部分的计算工作量,可能会有很好的效果。假设1/2时间减少。

    二、对线段做二叉管理。曲线的线段太多了。遍历不是个好方法。根据线段y值所在的空间构造二叉树可以减少相当的定位时间,不用遍历每条线段来碰撞。假设1/2时间减少。

    虽然也是两项很有意义的优化,但相对需要花的代价也较大。

    同时没有处理好的还有微软雅黑的cmap表和三次曲线。

    这些留待2.0版本解决。

    1.0我想使用一个更直接的方式,多线程。

    字模生成独立线程,渲染的时候如果字模没有生成好,占位和排版先用起来,字模随便填个啥。好了再渲染出来。

    65%完成度了,有能力的家伙们,现在字模已经能画了,后面的工作已经可以自己搞定了。不过我还是会把他推进到80%滴。

    80%定义,可以指定任意字号字符串带排版输出。排版的定义是文字文字正常,空格正常,间距正常。

    2010.5.18 凌晨两点。

  • 相关阅读:
    Android使用LocalSocket抓取数据
    求一个数组的最长递减子序列 比如{9,4,3,2,5,4,3,2}的最长递减子序列为{9,5,4,3,2}
    链表A和B的有序合并,合并过程不产生新的节点,合并后B消失
    Android中intent如何传递自定义数据类型
    字符串的排列组合问题
    android.net.LocalSocket
    [转]OWC生成柱图,线图,饼图
    利用C#对远程服务进行操作
    域备份&域还原
    ActiveReports for .NET 简单使用
  • 原文地址:https://www.cnblogs.com/crazylights/p/1868470.html
Copyright © 2011-2022 走看看