通常计算机在显示图片都是CPU与GPU协同合作完成一次渲染工作。
CPU:负责计算图片frame,解码,CoreGraphics,涉及图片的纹理处理通过总线交给GPU去处理
GPU:纹理混合,顶点变换与计算,像素的填充计算,渲染到帧缓存区
时钟信号:垂直同步信号V-Sync,水平同步信号H-Sync
iOS设备双缓存机制:显示系统通常会引入两个帧缓存区。
图片显示图片显示流程:
1:从磁盘加载一张图片(这张图片是未接压缩的)
2:将生成的UIImage赋值给UIImageView
3:接着一个隐式的CATransaction捕获到了UIImageView的图层变换
4:在主线程的下一个runloop到来时,Core Animation提交这个隐式的transaction
4.1分配内存缓存区用来管理IO和解压缩
4.2将文件数据从磁盘读取到内存
4.3将压缩的图片数据解码成未压缩的位图(在主线程一个非常耗时的内存操作)
4.4最后CoreAnimation中CALayer使用未压缩的位图渲染UIImageView的图层
5:渲染流程
5.1GPU获取图片的坐标
5.2将坐标交个顶点着色器
5.3将图片光栅化(光栅化作用是什么?)
5.4从帧缓存区渲染到屏幕
为什么要压缩图片
位图:位图是一个像素的数组,数组中的每个像素代表图片中的一个点;常用的png,jpeg都是位图(压缩的位图位图图形格式);
解压缩原理
当未接压缩的图片要渲染到屏幕时,系统会在主线程进行解压缩,而如果已经解压缩,则直接拿来使用,系统不在对其进行解压缩。
因此:业内的解决方案,在子线程其他对其进行强制解压缩;而强制解压缩的原理就是对图片进行重新绘制,得到一张新的解压缩后的位图,用到的核心函数是CGBitmapContextCreate
网友评论