【移動應(yīng)用開發(fā)技術(shù)】iOS中圖片的解壓縮到渲染過程詳解_第1頁
【移動應(yīng)用開發(fā)技術(shù)】iOS中圖片的解壓縮到渲染過程詳解_第2頁
【移動應(yīng)用開發(fā)技術(shù)】iOS中圖片的解壓縮到渲染過程詳解_第3頁
免費預(yù)覽已結(jié)束,剩余1頁可下載查看

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)

文檔簡介

【移動應(yīng)用開發(fā)技術(shù)】iOS中圖片的解壓縮到渲染過程詳解

前言在移動app開發(fā)過程中,圖片往往是不可或缺的資源。從磁盤上加載一張圖片,到顯示到屏幕上,中間經(jīng)過了一些復(fù)雜的過程,其中非常重要的一步就是對圖片的解壓縮。下面來一起看看詳細的介紹吧一.圖像從文件到屏幕過程通常計算機在顯示是CPU與GPU協(xié)同合作完成一次渲染.接下來我們了解一下CPU/GPU等在這樣一次渲染過程中,具體的分工是什么?圖片顯示到屏幕上是CPU與GPU的協(xié)作完成

對應(yīng)應(yīng)用來說,圖片是最占用手機內(nèi)存的資源,將一張圖片從磁盤中加載出來,并最終顯示到屏幕上,中間其實經(jīng)過了一系列復(fù)雜的處理過程。

二.圖片加載的工作流程1、假設(shè)我們使用+imageWithContentsOfFile:方法從磁盤中加載一張圖片,這個時候的圖片并沒有解壓縮;

2、然后將生成的UIImage賦值給UIImageView;

3、接著一個隱式的CATransaction捕獲到了UIImageView圖層樹的變化;4、在主線程的下一個runloop到來時,CoreAnimation提交了這個隱式的transaction,這個過程可能會對圖片進行copy操作,而受圖片是否字節(jié)對齊等因素的影響,這個copy操作可能會涉及以下部分或全部步驟:5、渲染流程我們提到了圖片的解壓縮是一個非常耗時的CPU操作,并且它默認是在主線程中執(zhí)行的。那么當(dāng)需要加載的圖片比較多時,就會對我們應(yīng)用的響應(yīng)性造成嚴重的影響,尤其是在快速滑動的列表上,這個問題會表現(xiàn)得更加突出。

三.為什么要解壓縮圖片

既然圖片的解壓縮需要消耗大量的CPU時間,那么我們?yōu)槭裁催€要對圖片進行解壓縮呢?是否可以不經(jīng)過解壓縮,而直接將圖片顯示到屏幕上呢?答案是否定的。要想弄明白這個問題,我們首先需要知道什么是位圖

其實,位圖就是一個像素數(shù)組,數(shù)組中的每個像素就代表著圖片中的一個點。我們在應(yīng)用中經(jīng)常用到的JPEG和PNG圖片就是位圖

大家可以嘗試

打印rawData,這里就是圖片的原始數(shù)據(jù).

事實上,不管是JPEG還是PNG圖片,都是一種壓縮的位圖圖形格式。只不過PNG圖片是無損壓縮,并且支持alpha通道,而JPEG圖片則是有損壓縮,可以指定0-100%的壓縮比。值得一提的是,在蘋果的SDK中專門提供了兩個函數(shù)用來生成PNG和JPEG圖片:

因此,在將磁盤中的圖片渲染到屏幕之前,必須先要得到圖片的原始像素數(shù)據(jù),才能執(zhí)行后續(xù)的繪制操作,這就是為什么需要對圖片解壓縮的原因。

四.解壓縮原理

既然圖片的解壓縮不可避免,而我們也不想讓它在主線程執(zhí)行,影響我們應(yīng)用的響應(yīng)性,那么是否有比較好的解決方案呢?

我們前面已經(jīng)提到了,當(dāng)未解壓縮的圖片將要渲染到屏幕時,系統(tǒng)會在主線程對圖片進行解壓縮,而如果圖片已經(jīng)解壓縮了,系統(tǒng)就不會再對圖片進行解壓縮。因此,也就有了業(yè)內(nèi)的解決方案,在子線程提前對圖片進行強制解壓縮。

而強制解壓縮的原理就是對圖片進行重新繪制,得到一張新的解壓縮后的位圖。其中,用到的最核心的函數(shù)是CGBitmapContextCreate:

五.YYImage\SDWebImage開源框架實現(xiàn)用于解壓縮圖片的函數(shù)YYCGImageCreateDecodedCopy存在于YYImageCoder類中,核心代碼如下它接受一個原始的位圖參數(shù)imageRef,最終返回一個新的解壓縮后的位圖newImage,中間主要經(jīng)過了以下三個步驟:事實上,SDWebImage中對圖片的解壓縮過程與上述完全一致,只是傳遞給CGBitmapContextCreate函數(shù)的部分參數(shù)存在細微的差別

性能對比:總結(jié)1、圖片文件只有在確認要顯示時,CPU才會對齊進行解壓縮.因為解壓是非常消耗性能的事情.解壓過的圖片就不會重復(fù)解壓,會緩存起來.

2、圖片渲染到屏幕的過程:讀取文件->計算Frame->圖片解碼->解碼后紋理圖片位圖數(shù)據(jù)通過數(shù)據(jù)總線交給GPU->GPU獲取圖片F(xiàn)rame->頂點變換計算->光柵化->根據(jù)紋理坐標(biāo)獲取每個像素點的顏色值(如果出現(xiàn)透明值需要將每個像素點的顏色*透明度值)->渲染到幀緩存區(qū)->渲染到屏幕

3、面試中如果能按照這個邏輯闡述,應(yīng)該沒有大的問題

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

最新文檔

評論

0/150

提交評論