? ? 不知道大家有沒有發(fā)現(xiàn)在從本地讀取png圖片的時候data與原數(shù)據(jù)不一樣潮针,讀取如下:
? ? NSString *path = [[NSBundle mainBundle] pathForResource:@"11" ofType:@"png"];
?? ?NSData *data = [NSData dataWithContentsOfFile:path];
? ? 將data進行數(shù)據(jù)塊拆分得到:
xcode讀取chunks
? ? 而實際的data數(shù)據(jù)晶姊,從終端中讀取并拆分結(jié)果:
實際chunks
可以看到xcode(本人用的10.0)對圖片數(shù)據(jù)進行了處理崭倘,增加了一些新的chunk并對IDAT數(shù)據(jù)進行了拆分斟湃。還有人發(fā)現(xiàn),標準的24bit PNG文件存儲方式是按照順序(紅/綠/藍/透明度)這樣來存每一個像素模软,即RGBA雁仲,而經(jīng)過Xcode優(yōu)化之后的PNG文件像素順序變成了BGRA疗我,這樣的非標準的PNG文件在一般操作系統(tǒng)也就沒辦法讀了咆畏。蘋果這么做是有原因的,在OpenGL的wiki有一篇文章?提到了絕大部分GPU的圖像/紋理顯存每個單元都是24bit的吴裤,RGBA和BGRA都有旧找,但BGRA是主流的。這樣就說得通了:蘋果為了減少圖像運算時花在數(shù)據(jù)交換(從文件系統(tǒng)到顯示出來)的時間麦牺,運用了類似DMA的原理钮蛛,圖形數(shù)據(jù)可以在總線里直接走而不用花掉CPU的時間去協(xié)助處理。