美文网首页
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