-
图片文件加载
图片来源:网络、硬盘,存储在网络和磁盘里的各种格式的图片都是经过压缩之后的
从网络或磁盘加载图片生成UIImage存到内存空间中,在image赋值给UIImageView确定要显示图片时,此时图片交给CPU处理 -
CPU解码图片
CPU将压缩过的图片还原成未压缩的位图,然后由CALayer使用位图数据渲染到UIImageView的图层,CPU计算好图片的frame,之后再交给GPU处理
位图就是一个像素数组,数组中的每个像素就代表着图片中的一个点
图片的解压缩过程在主线程执行,为了不阻塞主线程,较好的解决方案是在子线程提前对图片进行强制解压缩。
而强制解压缩的原理就是对图片进行重新绘制,得到一张新的解压缩后的位图。
-
GPU处理图片
GPU 获取到图片的坐标,通过顶点着色器计算顶点、将图片光栅化也就是获取图片对应屏幕上的像素点、片元着色器计算每个像素点最终显示的颜色值进行填充颜色等等一系列操作,然后添加纹理,纹理坐标与像素点坐标重合(GPU显示图片的流程是着色器的渲染流程),渲染到帧缓存区,之后交给controller显示图片
GPU渲染流程
当滚动或者在屏幕上移动图形图像时,同样的纹理能够被复用,CPU 只需简单的告诉 GPU 新的位置就行了,GPU 就可以重用存在的纹理而更高效地绘制。
-
controller显示图片到屏幕上
-
总结
图片从文件显示到屏幕上需要CPU和GPU协同工作才能完成渲染。
图片文件只有在确认要显示时,CPU才会对其进行解压缩.因为解压是非常消耗性能的事情,解压过的图片就不会重复解压,会缓存起来.
参考链接:
1、探讨iOS 中图片的解压缩到渲染过程
2、绘制像素到屏幕上
网友评论