屏幕显示图像的过程
我们知道,屏幕是由一个个物理显示单元组成,每一个单元我们可以称之为一个物理像素点,而每一个像素点可以发出多种颜色。
而图像,就是在不同的物理像素点上显示不同的颜色构成的。
像素点的颜色
像素的颜色是有RGB三基色组成,比如1600万即2的24次方,即每个基本色(R、G、B)深度扩展至8 bit(位),颜色深度越深,所能显示的色彩更加丰富靓丽。
更新屏幕图像
更新画面是屏幕以固定的频率刷新(从GPU取数据)。
比如有一部手机屏幕的刷新频率是 60Hz。当一帧(frame)图像绘制完毕后准备绘制下一帧时,显示器会发出一个垂直同步信号(如vsync), 60Hz的屏幕就会一秒内发出 60次这样的信号。而这个信号主要是用于同步CPU、GPU和屏幕。
*CPU将计算好的显示内容提交给 GPU,GPU渲染后放入帧缓冲区。然后视频控制器按照同步信号从帧缓冲区取帧数据传递给显示器显示。
*CPU用于数据计算,GPU负责图形渲染并最终输送给显示器的各个像素点的色值。
操作系统绘制API的封装——UI框架
由于最终的图形计算和绘制都是由相应的硬件来完成,用开发者通常不会直接面对硬件。操作系统会提供一些封装后的API,供操作系统之上的应用调用。
但是对于应用开发者来说,直接调用这些操作系统提供的API是比较复杂和低效的,因为操作系统提供的API往往比较基础,直接调用需要了解API的很多细节。
各个平台几乎所有用于开发GUI(图形用户接口)框架的,编程语言都会在操作系统提供的API之上再封装一层,将操作系统原生API封装在一个编程框架和模型中,然后定义一种简单的开发规则来开发GUI应用程序。而这一层抽象,正是我们所说的“UI框架”。
如Android SDK正是封装了Android操作系统API,提供了一个“UI描述文件 XML+Java/Kotlin 操作 DOM”的UI 框架。iOS的 UIKit 对 View 的抽象也是一样的。他们都将操作系统API抽象成一个基础对象(如Canvas),然后再定义一套规则来描述UI,如UI树结构,UI 操作的单线程原则等。