iOS中图片的解压缩到渲染过程详解

 行业动态     |      2019-08-27 15:43

前言

在移动app开发过程中,图片往往是不可或缺的资源。从磁盘上加载一张图片,到显示到屏幕上,中间经过了一些复杂的过程,其中非常重要的一步就是对图片的解压缩。下面来一起看看详细的介绍吧

一.图像从文件到屏幕过程

通常计算机在显示是cpu与gpu协同合作完成一次渲染.接下来我们了解一下cpu/gpu等在这样一次渲染过程中,具体的分工是什么



二.图片加载的工作流程



3、接着一个隐式的 catransaction 捕获到了 uiimageview 图层树的变化;

4、在主线程的下一个 runloop 到来时,core animation 提交了这个隐式的 transaction ,这个过程可能会对图片进行 copy 操作,而受图片是否字节对齐等因素的影响,这个 copy 操作可能会涉及以下部分或全部步骤:

5、渲染流程






uiimage *image = [uiimage imagenamed:@"text.png"];
cfdataref rawdata = cgdataprovidercopydata);


// return image as png. may return nil if image has no cgimageref or invalid bitmap format
uikit_extern nsdata * __nullable uiimagepngrepresentation;
// return image as jpeg. may return nil if image has no cgimageref or invalid bitmap format. compression is 0..1 
uikit_extern nsdata * __nullable uiimagejpegrepresentation;




而强制解压缩的原理就是对图片进行重新绘制,得到一张新的解压缩后的位图。其中,用到的最核心的函数是 cgbitmapcontextcreate : 

cg_extern cgcontextref __nullable cgbitmapcontextcreate
 cg_available_starting;