美文网首页
iOS图片加载过程

iOS图片加载过程

作者: 吕建雄 | 来源:发表于2019-05-17 09:54 被阅读0次

通常计算机在显示图片都是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

相关文章

网友评论

      本文标题:iOS图片加载过程

      本文链接:https://www.haomeiwen.com/subject/juwgaqtx.html