图片是如何显示的

图片是如何显示的

在讲解如何选择图片格式之前,我感觉有必要先了解下,图片是如何展示的。如果我们要展示一张图片,一般步骤是这样的:

/// Assets.xcassets中的图片,不需要后缀
let image = UIImage(named: "icon")
let imageView = UIImageView(frame: rect)
imageView.image = image
view.addSubview(imageView)
复制代码

运行程序,我们就可以在指定位置看到这个icon。看似简单的代码背后隐藏了很多细节工作。一张图片的展示,从代码执行到展示出来大致经历了这些步骤:

1. 加载图片

  • 从磁盘中加载一张图片;

  • 然后将生成的 UIImage 赋值给 UIImageView

  • 接着一个隐式的 CATransaction 捕获到了 UIImageView 图层树的变化;

  • 分配内存缓冲区用于管理文件 IO 和解压缩操作,将文件数据从磁盘读到内存中;

2. 图片解码(解压)

  • 将压缩的图片数据解码成未压缩的位图形式,这是一个非常耗时的 CPU 操作,默认在主线程进行;

3. 图片渲染

  • Core AnimationCALayer使用解压(解码)的位图数据渲染 UIImageView 的图层;

  • CPU计算好图片的Frame,对图片解压之后,就会交给GPU来做图片渲染渲染流程;

  • GPU获取获取图片的坐标,将坐标交给顶点着色器(顶点计算),将图片光栅化(获取图片对应屏幕上的像素点),片元着色器计算(计算每个像素点的最终显示的颜色值);

  • 从帧缓存区中渲染到屏幕上;

这其中有个关键步骤是图片解码。那为什么要解码呢,这是因为我们平常使用的图片一般为了节约空间都会经过一些压缩算法进行封装,而使用时屏幕要精确的渲染到每个像素点,这就需要把压缩的图片解码展开,便于系统处理。

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容