原理篇程序员待读清单

篇1:SDWebImage源码看图片解码

2017-11-02  本文已影响357人  南华coder

导语:这是SDWebImage源码理解的第一篇,本篇先介绍图片解码相关的背景知识,然后介绍SDWebImage中解码的源码及其解码相关的问题。

一、背景知识

在SDWebImage中处理图片解码的是SDWebImageDecoder

1、图片加载
2、图片解码
3、图片重采样
4、总结

二、源码说明

SDWebImageDecoder的源码有200多行,重要的函数两个。其一是:(默认)解码图片办法decodedImageWithImage: ;其二是:处理大图缩放和解码办法decodedAndScaledDownImageWithImage:。

1、decodedImageWithImage:函数

说明:解码操作在@autoreleasepool中,可以使得局部变量能尽早释放掉,避免内存峰值过高。

2、decodedAndScaledDownImageWithImage:函数处理流程
3、CGBitmapContextCreate创建位图上下文

函数原型CGBitmapContextCreate(void *data,size_t width,size_t height,size_t bitsPerComponent,size_t bytesPerRow,CGColorSpaceRef colorspace,CGBitmapInfo bitmapInfo)

说明:一个新的位图上下文的像素格式由三个参数决定:每个组件的位数(bitsPerComponent),颜色空间(colorspace),alpha选项(bitmapInfo),alpha值决定了绘制像素的透明性。

三、解码高分辨率图的担忧

1、“被嫌弃”的解码
2、加载高分辨率图问题
3、需要考虑的问题

凭心而论,后台不经处理,任意下发高分辨率大图这类事发生可能性很少;绝大部分场景下,iOS设备上不需要分辨率过高的图(iPhone X的屏幕尺寸也不过是1125px × 2436px),那我们应该考虑什么呢。

四、解码中的小问题

SDWebImageDecoder的解码工作中,有两个小问题值得留意一下。

1、颜色空间的问题

这么做的原因,我认为只要有两点

2、解码不透明图片的问题

End

上一篇下一篇

猜你喜欢

热点阅读