美文网首页
iOS--博文收藏

iOS--博文收藏

作者: 灰灰是只小贱狗 | 来源:发表于2018-05-22 20:16 被阅读12次

    强烈推荐阅读大神博客--谈谈 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

    未完待续。。。。。

    相关文章

      网友评论

          本文标题:iOS--博文收藏

          本文链接:https://www.haomeiwen.com/subject/jtskjftx.html