下載本文檔
版權(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)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025至2030年中國熱流道管坯模具數(shù)據(jù)監(jiān)測研究報告
- 二零二五年度人工智能技術(shù)研發(fā)與轉(zhuǎn)化合同3篇
- 二零二五版太陽能光伏電站項目環(huán)境影響評價與風(fēng)險評估合同3篇
- 二零二五年度個人教育貸款合同范本2篇
- 二零二五年度倉儲物流園區(qū)物業(yè)管理委托合同業(yè)委會(物流版)3篇
- 二零二五年度農(nóng)業(yè)生態(tài)溫室大棚租賃與有機農(nóng)業(yè)認證合同3篇
- 二零二五版農(nóng)業(yè)機械設(shè)備銷售代理合同范本2篇
- 制定醫(yī)院經(jīng)濟管理規(guī)定(3篇)
- 二零二五版雙方協(xié)商離婚書樣本編制與離婚后財產(chǎn)保全策略3篇
- 寫字樓辦公室出租合同書
- 浙江寧波鄞州區(qū)市級名校2025屆中考生物全真模擬試卷含解析
- 2024-2025學(xué)年廣東省深圳市南山區(qū)監(jiān)測數(shù)學(xué)三年級第一學(xué)期期末學(xué)業(yè)水平測試試題含解析
- IATF16949基礎(chǔ)知識培訓(xùn)教材
- 【MOOC】大學(xué)生創(chuàng)新創(chuàng)業(yè)知能訓(xùn)練與指導(dǎo)-西北農(nóng)林科技大學(xué) 中國大學(xué)慕課MOOC答案
- 勞務(wù)派遣公司員工考核方案
- 基礎(chǔ)生態(tài)學(xué)-7種內(nèi)種間關(guān)系
- 2024年光伏農(nóng)田出租合同范本
- 《阻燃材料與技術(shù)》課件 第3講 阻燃基本理論
- 2024-2030年中國黃鱔市市場供需現(xiàn)狀與營銷渠道分析報告
- 新人教版九年級化學(xué)第三單元復(fù)習(xí)課件
- 江蘇省南京鼓樓區(qū)2024年中考聯(lián)考英語試題含答案
評論
0/150
提交評論