圖片從文件加載到渲染到屏幕上是CPU和GPU協(xié)作完成的癌佩。
如下圖所示:
圖片顯示原理
CPU加載圖片原始數(shù)據(jù)峭梳,并解壓縮,把解碼后的圖片信息通過總線傳給GPU虱而。
GPU進行紋理混合筏餐,頂點變換與計算,像素點的填充與計算牡拇,輸出到幀緩沖區(qū)魁瞪。
最后由幀緩沖區(qū)渲染到屏幕上穆律。
下面舉個例子具體說明圖片從文件到屏幕的工作流程:
1?當我們使用+imageWithContentsOfFile:方法加載圖片文件時,這個時候圖片還是壓縮的二進制文件导俘。
2?當UIImage對象賦值給UIImageView時峦耘,CATransaction捕獲到圖層樹的變化。
3?在主線程的下一個?runloop?到來時旅薄,Core Animation?提交了這個隱式的?transaction?辅髓,這個過程可能會對圖片進行?copy?操作,而受圖片是否字節(jié)對齊等因素的影響少梁,這個?copy?操作可能會涉及以下部分或全部步驟:
分配內(nèi)存緩沖區(qū)用于管理文件 IO 和解壓縮操作洛口;
將文件數(shù)據(jù)從磁盤讀到內(nèi)存中;
將壓縮的圖片數(shù)據(jù)解碼成未壓縮的位圖形式凯沪,這是一個非常耗時的 CPU 操作第焰;
Core Animation中的CALayer使用未壓縮的位圖數(shù)據(jù)渲染UIImageView的圖層。
最后CPU計算好圖片的Frame,對圖片解壓之后就會交給GPU來做圖片渲染
4?在GPU中進行渲染
GPU獲取獲取圖片的坐標
將坐標交給頂點著色器(頂點計算)
將圖片光柵化(獲取圖片對應屏幕上的像素點)
片元著色器計算(計算每個像素點的最終顯示的顏色值)
從幀緩存區(qū)中渲染到屏幕上