iOS--博文收藏

强烈推荐阅读大神博客--谈谈 iOS 中图片的解压缩

知识点:

位图:位图就是一个像素数组,数组中的每个像素就代表着图片中的一个点。我们在应用中经常用到的 JPEG 和 PNG 图片就是位图。

以30*30像素的图片为例:
解压缩后的图片大小 = 图片的像素宽 30 * 图片的像素高 30 * 每个像素所占的字节数 4

不管是 JPEG 还是 PNG 图片,都是一种压缩的位图图形格式。
只不过 PNG 图片是无损压缩,并且支持 alpha 通道,而 JPEG 图片则是有损压缩,可以指定 0-100% 的压缩比。值得一提的是,在苹果的 SDK 中专门提供了两个函数用来生成 PNG 和 JPEG 图片:

// return image as PNG. May return nil if image has no CGImageRef or invalid bitmap format
UIKIT_EXTERN NSData * __nullable UIImagePNGRepresentation(UIImage * __nonnull image);

// return image as JPEG. May return nil if image has no CGImageRef or invalid bitmap format. compression is 0(most)..1(least)                           
UIKIT_EXTERN NSData * __nullable UIImageJPEGRepresentation(UIImage * __nonnull image, CGFloat compressionQuality);

在将磁盘中的图片渲染到屏幕之前,必须先要得到图片的原始像素数据,才能执行后续的绘制操作,这就是为什么需要对图片解压缩的原因。

CGBitmapContextCreate

CG_EXTERN CGContextRef __nullable CGBitmapContextCreate(void * __nullable data,
    size_t width, size_t height, size_t bitsPerComponent, size_t bytesPerRow,
    CGColorSpaceRef cg_nullable space, uint32_t bitmapInfo)
    CG_AVAILABLE_STARTING(__MAC_10_0, __IPHONE_2_0);

理解该函数含义前需要了解以下几个参数:
bitsPerComponent:一个像素中每个独立的颜色分量使用的 bit 数
Bits per pixel: 一个像素使用的总 bit 数
Bytes per row:位图中的每一行使用的字节数
以上三个参数构成了一个像素格式
此外还有一个参数:位图的布局信息 CGBitmapInfo

未完待续。。。。。

©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • 卷首语 欢迎来到 objc.io 的第三期! 这一期都是关于视图层的。当然视图层有很多方面,我们需要把它们缩小到几...
    评评分分阅读 5,818评论 0 18
  • 绘制像素到屏幕上 answer-huang22 Mar 2014 分享文章 一个像素是如何绘制到屏幕上去的?有很多...
    阿狸旅途T恤阅读 5,609评论 0 7
  • 知道了那么多关于iOS上界面渲染的理论知识后,终于可以回归最开始的问题,将一张 png/jpg 格式的图片渲染到页...
    巫师学徒阅读 4,106评论 0 2
  • 为什么图像在显示到屏幕上之前要进行解码 一般我们使用的图像是JPEG/PNG,这些图像数据不是位图,而是是经过编码...
    zziazm阅读 12,469评论 1 30
  • 文 / 落篱子 1.我跟你很熟吗 长发及腰的苏黎世已不是当年那个混进人群中就被淹没的毫不起眼的小女孩了。 现在的苏...
    落篱子阅读 6,057评论 31 41

友情链接更多精彩内容