91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

如何高效利用Bitmap

發布時間:2021-12-30 09:27:59 來源:億速云 閱讀:155 作者:iii 欄目:大數據

這篇文章主要介紹“如何高效利用Bitmap”,在日常操作中,相信很多人在如何高效利用Bitmap問題上存在疑惑,小編查閱了各式資料,整理出簡單好用的操作方法,希望對大家解答”如何高效利用Bitmap”的疑惑有所幫助!接下來,請跟著小編一起來學習吧!

背景:圖片加載在項目中是隨處可見,而圖片加載在很多情況下需要用到Bitmap(位圖)這個類。Bitmap可以說是一個“大胖子”,因為Bitmap自身會將圖片每個像素的屬性全部保存在內存中。這就會導致我們稍有不慎就會創建出一個占用內存很大的Bitmap對象,從而導致加載速度過慢,常見表現為OOM(Out of Memory)。 
有必要對Bitmap進行優化,從而降低出現Crash情況的概率,提高app的加載圖片速度,增強APP穩定性。

1
應用場景

舉個栗子

如何高效利用Bitmap

上面的代碼經常在我們的項目中出現。你可知其背后的處理邏輯? 
根據源碼可知,上面的代碼中兩個方法setBackgroundResource()setImageResource()是使用Bitmap作為過渡處理的。在運行時,上面的兩個方法會使用BitmapFactory.decodeStream()方法將資源圖片生成一個Bitmap,然后由這個Bitmap生成一個Drawable,最后再將這個Drawable設置到ImageView。

如果運用以上代碼,在加載的圖片的尺寸遠大于ImageView的尺寸,你會發現控件加載圖片非常緩慢。你使用在ListView或RecycleView中批量加載一些未知size的圖片的時候,你會發現會出現卡頓的情況。

2
BitmapFactory

BitmapFactory是谷歌官方為我們開發者提供加載圖片方式的類,它可以從文件、圖片傳輸流、字節數組這三種方式中加載圖片。

3
Options類介紹

要實現高效加載Bitmap,首先我們要了解Options類的幾個參數,因為正是通過合理的配置這幾個參數,我們才能夠實現高效的加載Bitmap對象。Options類是BitmapFactory的一個靜態內部類,我們來看一下它的源碼:

如何高效利用Bitmap

幾個名詞解釋下:

  • 屏幕密度 
    屏幕密度分為相對屏幕密度絕對屏幕密度 
    density:可以理解為相對屏幕密度,我們知道,1個DIP在160dpi的屏幕上大約為1像素大小。我們以160dpi為基準線,density的值即為相對于160dpi屏幕的相對屏幕密度。比如,160dpi屏幕的density值為1, 320dpi屏幕的density值為2 
    densityDpi:可以理解為絕對屏幕密度,也就是實際的屏幕密度值(dots per inch),比如160dpi屏幕的densityDpi值就是160

  • 縮放系數 
    Options類中存在一個inScaled參數,這個參數表示是否支持縮放,我們從Options的默然構造方法中可以看到這個參數被初始化為了true,也就是說默認是支持縮放的。那么將如何進行縮放呢?答案是根據縮放系數進行縮放。關于縮放系數的計算方法,其實我們在講解如何計算內存中Bitmap的大小時已經介紹過了。縮放系數就是inTargetDensity除以inDensity。inDensity表示我們的圖片所處的資源文件夾對應的dpi,inTargetDensity表示目標設備的屏幕密度。

  • 采樣率(inSampleSize) 
    當這個參數為1時,采樣后的圖片大小和原來一樣;當這個參數為2時,采樣后的圖片寬高均為原來的1/2,大小也就成了原來的1/4。也就是說,采樣后的大小等于原始大小除以采樣率的平方。官方文檔規定,inSampleSize的值應為2的非負整數次冪(1,2,4,… ),否則會被系統向下取整并找到一個最接近的值。通過設置inSampleSize我們就能夠將圖片縮放到一個合理的大小

4
Bitmap優化

1.獲取圖片的原始寬高 
通過將Options的inJustDecodeBounds屬性設為true后調用decodeResource方法,可以實現不真正加載圖片而只是獲取圖片的尺寸信息

如何高效利用Bitmap

2、根據原始寬高計算出inSampleSize,代碼如下:

如何高效利用Bitmap

3、根據計算出的inSampleSize生成Bitmap

如何高效利用Bitmap

4、調用以上的decodeSampledBitmapFromResource方法,使用自定尺寸的Bitmap。 如果你要將一張大圖設置為一個250*250的縮略圖,執行以下代碼:

如何高效利用Bitmap

到此,關于“如何高效利用Bitmap”的學習就結束了,希望能夠解決大家的疑惑。理論與實踐的搭配能更好的幫助大家學習,快去試試吧!若想繼續學習更多相關知識,請繼續關注億速云網站,小編會繼續努力為大家帶來更多實用的文章!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

SHOW| 潜山县| 绥宁县| 汉川市| 依安县| 余干县| 宝鸡市| 德兴市| 富锦市| 成都市| 嘉兴市| 攀枝花市| 波密县| 龙胜| 晋城| 新龙县| 高唐县| 平乐县| 佛坪县| 耒阳市| 高陵县| 东乡族自治县| 株洲市| 东兰县| 深泽县| 成安县| 香港| 北票市| 宜黄县| 喀喇沁旗| 甘南县| 敦化市| 建昌县| 阿坝| 太保市| 成都市| 颍上县| 长海县| 岐山县| 勃利县| 黄石市|