強(qiáng)烈推薦閱讀大神博客--談?wù)?iOS 中圖片的解壓縮
知識(shí)點(diǎn):
位圖:位圖就是一個(gè)像素?cái)?shù)組,數(shù)組中的每個(gè)像素就代表著圖片中的一個(gè)點(diǎn)。我們?cè)趹?yīng)用中經(jīng)常用到的 JPEG 和 PNG 圖片就是位圖。
以30*30像素的圖片為例:
解壓縮后的圖片大小 = 圖片的像素寬 30 * 圖片的像素高 30 * 每個(gè)像素所占的字節(jié)數(shù) 4
不管是 JPEG 還是 PNG 圖片,都是一種壓縮的位圖圖形格式。
只不過(guò) PNG 圖片是無(wú)損壓縮,并且支持 alpha 通道,而 JPEG 圖片則是有損壓縮,可以指定 0-100% 的壓縮比。值得一提的是,在蘋果的 SDK 中專門提供了兩個(gè)函數(shù)用來(lái)生成 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);
在將磁盤中的圖片渲染到屏幕之前,必須先要得到圖片的原始像素?cái)?shù)據(jù),才能執(zhí)行后續(xù)的繪制操作,這就是為什么需要對(duì)圖片解壓縮的原因。
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);
理解該函數(shù)含義前需要了解以下幾個(gè)參數(shù):
bitsPerComponent:一個(gè)像素中每個(gè)獨(dú)立的顏色分量使用的 bit 數(shù)
Bits per pixel: 一個(gè)像素使用的總 bit 數(shù)
Bytes per row:位圖中的每一行使用的字節(jié)數(shù)
以上三個(gè)參數(shù)構(gòu)成了一個(gè)像素格式,
此外還有一個(gè)參數(shù):位圖的布局信息 CGBitmapInfo :
未完待續(xù)。。。。。