文字绘制主要包括编码转换(主要是中文)、字形解析(点线或image)和实际渲染三个步骤。在这个过程中,字形解析和实际渲染均是耗时步骤。Skia对文字解析的结果做了一套缓存机制。在中文字较多,使用多种字体,绘制的样式(粗/斜体)有变化时,这个缓存会变得很大,因此Skia文字缓存做了内存上的限制。

1、SkPaint

文字绘制与SkPaint的属性相关很大,先回头看下SkPaint相关的属性

class SkPaint
{
privateSkTypeface*     fTypeface;//字体SkPathEffect*   fPathEffect;//路径绘制效果SkShader*       fShader;//取色器SkXfermode*     fXfermode;//混合模式,类似OpenGL里面的Blend设置SkColorFilter*  fColorFilter;//图像绘制时,自定义图像采样函数时使用SkMaskFilter*   fMaskFilter;//路径绘制时,按有无像素做进一步自定义改进处理时使用SkRasterizer*   fRasterizer;//路径绘制时自定义生成像素点的算法时使用SkDrawLooper*   fLooper;//循环绘制,SkCanvas里面的第二重循环,一般不用关注SkImageFilter*  fImageFilter;//SkCanvas的第一重循环,绘制后做后处理用,一般不用关注SkAnnotation*   fAnnotation;//暂时没用到的属性SkScalar        

Skia深入分析5——skia文字绘制的实现相关推荐

  1. Skia深入分析10——Skia库的性能与优化潜力

    Skia库性能与优化潜力 图形/渲染 算法/架构 作为图形渲染引擎,性能上是非常重要的,按通常Android手机60帧的刷新率,绘制一帧的总时间只有16ms,可谓是毫厘必争.提升性能到最后,就必然跟不 ...

  2. Skia深入分析8——Skia的GPU绘图

    Skia的GPU绘图 一.Skia-GPU概述 在Android4.2到Android5.0的过程中,skia中开发较频繁的部分莫过于GPU加速部分和延迟渲染机制,尽管目前来看几乎没有用到,但后续很可 ...

  3. Skia深入分析2——skia渲染架构

    一.渲染层级 从渲染流程上分,Skia可分为如下三个层级: 1.指令层:SkPicture.SkDeferredCanvas->SkCanvas 这一层决定需要执行哪些绘图操作,绘图操作的预变换 ...

  4. Skia深入分析6——skia中图像编解码代码概述

    1.API和自注册机制 Skia中编码解码图片都只需要一行代码: SkBitmap bitmap; SkImageDecoder::DecodeFile("test.xxx", & ...

  5. Skia深入分析7——区域解码

    Skia深入分析7--区域解码 1.概述 -当图片很大时,解码速度缓慢,占用内存很高,并且,当图片超过一定尺寸时,无法做纹理上传和显示(这跟GPU能力有关,一般的GPU是8192*8192).这时只好 ...

  6. Skia的初探(Skia的GN脚本编译与第一个Skia应用)

    前言 如今大前端代表之一flutter十分火热,也是一种大的趋势.flutter与rn对大前端上的理解不同,rn是自上而下的大前端解决方案,而flutter是自下而上的大前端解决方案.为什么我说flu ...

  7. hwui opengl VS skia opengl VS skia vulkan?

    之前讨论过skia codec部分在o,p上的变化,比如增加了heif解码等. 其实skia在android o,p的变化不只这些. 印象最深刻的还是渲染部分 从o开始hwui渲染支持skia ope ...

  8. Android之TextView文字绘制流程

    一:TextView的onDraw()方法: 1.第一句restartMarqueeIfNeeded()绘制字幕滚动. protected void onDraw(Canvas canvas) {re ...

  9. EasyX---快速入门---(一)基本绘图与文字绘制

    先上导图 基本说明 EasyX是针对C++的图形库,可以帮助C/C++初学者快速上手图形和游戏编程 EasyX原理 基于Windows图形编程,将Windows下的复杂程序过程进行封装,将Window ...

最新文章

  1. 曙光服务器bios设置_浪潮服务器PM8060阵列卡,如何做热备盘?操作相对有点复杂...
  2. centos修改oracle字符集
  3. 使用split进行分割时遇到特殊字符的问题
  4. c语言:将一个二维数组行和列的元素互换,存到另一个二维数组中。
  5. Python协程(真才实学,想学的进来)
  6. redis windows下的环境搭建
  7. sql视图语句_SQL视图:Replace View语句的示例语法
  8. ZooKeeper(五) 使用Zookeeper有序临时节点实现分布式锁
  9. python程序判断梅森素数_完美数与梅森素数Python
  10. 89C51流水灯代码示例,带proteus项目
  11. 曲线拟合最小二乘法优缺点_最小二乘法、回归分析法、灰色预测法、决策论、神经网络等5个算法的使用范围及优缺点是什么?...
  12. ABAQUS 转子动力学载荷
  13. matlab排序excel数据库,matlab对excel数据进行排序求和
  14. 触摸中国人工智能最前线
  15. 【机器学习】训练集、验证集与测试集
  16. 【2018-11-09】中证500指数的估值详情
  17. Linux系列6:bash学习
  18. 猫影视TV 2.0.8 附稳定源地址
  19. 生兔子c语言递归的方法,经典的兔子生兔子问题(C#递归解法)
  20. 微信开发 事件 trim subscribe

热门文章

  1. Cookie编程基础:检查浏览器是否接受Cookie
  2. Android 报错Failed to load native library: XXXX_so
  3. ubuntu20+PHP项目运行环境搭建
  4. CF1548D2 Gregor and the Odd Cows (Hard)
  5. 数学美 之 判断线段相交的最简方法
  6. 天猫精灵打开电脑 语音控制电脑
  7. getLocation需要在app.json中声明permission字段
  8. 计算机多媒体课件设计,多媒体课件设计与制作 教师课件制作平台
  9. 消防系统设计市场现状及未来发展趋势
  10. python获取csv文件中某一列或者某些列