热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

填充完成,开始字体排版和管理

文字填充最后果然没有想到什么有效地优化形态,回归碰撞检测扫描线方式,老老实实的来。c#的性能果然不负所望,低的可以。填充一个猛字ÿ

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 凌晨两点。




推荐阅读
  • 本文通过基准测试(Benchmark)对.NET Core环境下Thrift和HTTP客户端的微服务通信性能进行对比分析。基准测试是一种评估系统或组件性能的方法,通过运行一系列标准化的测试来衡量其表现。 ... [详细]
  • 本文详细介绍了 Python 中 thread 和 threading 模块的使用方法,并提供了丰富的示例和解释。文章首发于 HURUWO 的博客小站,本平台进行同步备份发布。如遇图片加载失败或有任何疑问,欢迎前往原博客留言。 ... [详细]
  • 多线程基础概览
    本文探讨了多线程的起源及其在现代编程中的重要性。线程的引入是为了增强进程的稳定性,确保一个进程的崩溃不会影响其他进程。而进程的存在则是为了保障操作系统的稳定运行,防止单一应用程序的错误导致整个系统的崩溃。线程作为进程的逻辑单元,多个线程共享同一CPU,需要合理调度以避免资源竞争。 ... [详细]
  • 在多线程并发环境中,普通变量的操作往往是线程不安全的。本文通过一个简单的例子,展示了如何使用 AtomicInteger 类及其核心的 CAS 无锁算法来保证线程安全。 ... [详细]
  • Java高并发与多线程(二):线程的实现方式详解
    本文将深入探讨Java中线程的三种主要实现方式,包括继承Thread类、实现Runnable接口和实现Callable接口,并分析它们之间的异同及其应用场景。 ... [详细]
  • 探讨如何在Go语言中高效地处理大规模切片的去重操作,特别是针对百万级数据量的场景。 ... [详细]
  • 在 Java 中,`join()` 方法用于使当前线程暂停,直到指定的线程执行完毕后再继续执行。此外,`join(long millis)` 方法允许当前线程在指定的毫秒数后继续执行。 ... [详细]
  • 本文介绍了如何使用Python的Paramiko库批量更新多台服务器的登录密码。通过示例代码展示了具体实现方法,确保了操作的高效性和安全性。Paramiko库提供了强大的SSH2协议支持,使得远程服务器管理变得更加便捷。此外,文章还详细说明了代码的各个部分,帮助读者更好地理解和应用这一技术。 ... [详细]
  • 在多线程环境中,IpcChannel的性能表现并未如预期般优于Tcp和Http通道。实际测试结果显示,在IIS6中通过Remoting创建的Ipc通道,其速度比Tcp通道慢了约20倍。本文详细分析了这一现象的原因,并提出了针对性的优化建议,以提升IpcChannel在高并发场景下的性能表现。 ... [详细]
  • 阿里巴巴终面技术挑战:如何利用 UDP 实现 TCP 功能?
    在阿里巴巴的技术面试中,技术总监曾提出一道关于如何利用 UDP 实现 TCP 功能的问题。当时回答得不够理想,因此事后进行了详细总结。通过与总监的进一步交流,了解到这是一道常见的阿里面试题。面试官的主要目的是考察应聘者对 UDP 和 TCP 在原理上的差异的理解,以及如何通过 UDP 实现类似 TCP 的可靠传输机制。 ... [详细]
  • Python多线程编程技巧与实战应用详解 ... [详细]
  • 深入剖析Java中SimpleDateFormat在多线程环境下的潜在风险与解决方案
    深入剖析Java中SimpleDateFormat在多线程环境下的潜在风险与解决方案 ... [详细]
  • Java并发机制详解及其在数据安全性保障中的应用方案 ... [详细]
  • 在本次分享中,我将详细介绍我的网络数据爬取项目,包括使用Scrapy-Redis进行分布式爬取的具体配置和多台机器的协同工作。此外,还将探讨从Scrapy到Scrapy-Redis的迁移过程,以及在实际爬取过程中遇到的各种反爬虫策略及其应对方法。 ... [详细]
  • 在PHP多线程扩展开发中,面临的主要挑战之一是多线程调用PHP用户类方法时可能出现的内存错误。具体表现为当多个线程同时调用同一个类实例的同一方法时,系统会抛出内存错误。为了解决这一问题,本文深入分析了PHP多线程扩展的实现机制,并提出了几种有效的解决方案和技术思路,包括线程安全的类设计、内存管理优化以及线程同步机制的改进。通过这些方法,可以显著提升PHP多线程扩展的稳定性和性能。 ... [详细]
author-avatar
鸿少爷仰望星空
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有