Skia深入分析5——skia文字绘制的实现
文字绘制主要包括编码转换(主要是中文)、字形解析(点线或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文字绘制的实现相关推荐
- Skia深入分析10——Skia库的性能与优化潜力
Skia库性能与优化潜力 图形/渲染 算法/架构 作为图形渲染引擎,性能上是非常重要的,按通常Android手机60帧的刷新率,绘制一帧的总时间只有16ms,可谓是毫厘必争.提升性能到最后,就必然跟不 ...
- Skia深入分析8——Skia的GPU绘图
Skia的GPU绘图 一.Skia-GPU概述 在Android4.2到Android5.0的过程中,skia中开发较频繁的部分莫过于GPU加速部分和延迟渲染机制,尽管目前来看几乎没有用到,但后续很可 ...
- Skia深入分析2——skia渲染架构
一.渲染层级 从渲染流程上分,Skia可分为如下三个层级: 1.指令层:SkPicture.SkDeferredCanvas->SkCanvas 这一层决定需要执行哪些绘图操作,绘图操作的预变换 ...
- Skia深入分析6——skia中图像编解码代码概述
1.API和自注册机制 Skia中编码解码图片都只需要一行代码: SkBitmap bitmap; SkImageDecoder::DecodeFile("test.xxx", & ...
- Skia深入分析7——区域解码
Skia深入分析7--区域解码 1.概述 -当图片很大时,解码速度缓慢,占用内存很高,并且,当图片超过一定尺寸时,无法做纹理上传和显示(这跟GPU能力有关,一般的GPU是8192*8192).这时只好 ...
- Skia的初探(Skia的GN脚本编译与第一个Skia应用)
前言 如今大前端代表之一flutter十分火热,也是一种大的趋势.flutter与rn对大前端上的理解不同,rn是自上而下的大前端解决方案,而flutter是自下而上的大前端解决方案.为什么我说flu ...
- hwui opengl VS skia opengl VS skia vulkan?
之前讨论过skia codec部分在o,p上的变化,比如增加了heif解码等. 其实skia在android o,p的变化不只这些. 印象最深刻的还是渲染部分 从o开始hwui渲染支持skia ope ...
- Android之TextView文字绘制流程
一:TextView的onDraw()方法: 1.第一句restartMarqueeIfNeeded()绘制字幕滚动. protected void onDraw(Canvas canvas) {re ...
- EasyX---快速入门---(一)基本绘图与文字绘制
先上导图 基本说明 EasyX是针对C++的图形库,可以帮助C/C++初学者快速上手图形和游戏编程 EasyX原理 基于Windows图形编程,将Windows下的复杂程序过程进行封装,将Window ...
最新文章
- 曙光服务器bios设置_浪潮服务器PM8060阵列卡,如何做热备盘?操作相对有点复杂...
- centos修改oracle字符集
- 使用split进行分割时遇到特殊字符的问题
- c语言:将一个二维数组行和列的元素互换,存到另一个二维数组中。
- Python协程(真才实学,想学的进来)
- redis windows下的环境搭建
- sql视图语句_SQL视图:Replace View语句的示例语法
- ZooKeeper(五) 使用Zookeeper有序临时节点实现分布式锁
- python程序判断梅森素数_完美数与梅森素数Python
- 89C51流水灯代码示例,带proteus项目
- 曲线拟合最小二乘法优缺点_最小二乘法、回归分析法、灰色预测法、决策论、神经网络等5个算法的使用范围及优缺点是什么?...
- ABAQUS 转子动力学载荷
- matlab排序excel数据库,matlab对excel数据进行排序求和
- 触摸中国人工智能最前线
- 【机器学习】训练集、验证集与测试集
- 【2018-11-09】中证500指数的估值详情
- Linux系列6:bash学习
- 猫影视TV 2.0.8 附稳定源地址
- 生兔子c语言递归的方法,经典的兔子生兔子问题(C#递归解法)
- 微信开发 事件 trim subscribe
热门文章
- Cookie编程基础:检查浏览器是否接受Cookie
- Android 报错Failed to load native library: XXXX_so
- ubuntu20+PHP项目运行环境搭建
- CF1548D2 Gregor and the Odd Cows (Hard)
- 数学美 之 判断线段相交的最简方法
- 天猫精灵打开电脑 语音控制电脑
- getLocation需要在app.json中声明permission字段
- 计算机多媒体课件设计,多媒体课件设计与制作 教师课件制作平台
- 消防系统设计市场现状及未来发展趋势
- python获取csv文件中某一列或者某些列