溫馨提示×

溫馨提示×

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

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

如何在運(yùn)行時獲取Bitmap的大小

發(fā)布時間:2022-01-11 17:02:31 來源:億速云 閱讀:117 作者:iii 欄目:大數(shù)據(jù)

這篇文章主要介紹了如何在運(yùn)行時獲取Bitmap的大小的相關(guān)知識,內(nèi)容詳細(xì)易懂,操作簡單快捷,具有一定借鑒價值,相信大家閱讀完這篇如何在運(yùn)行時獲取Bitmap的大小文章都會有所收獲,下面我們一起來看看吧。

一、如何在運(yùn)行時獲取Bitmap的大???

  • 獲取圖片實(shí)際需要的內(nèi)存大小

   
   
   public final int getByteCount() {if(mRecycled) {return 0;}return getRowBytes() * getHeight();}
  • 圖片實(shí)際占用的內(nèi)存大小

因為存在一個復(fù)用的場景,比如之前已經(jīng)開辟了400KB的大小用來顯示圖片A,現(xiàn)在我們需要顯示300KB的圖片B,而且圖片A已經(jīng)不需要顯示了,那么可能就會將之前開辟的400KB用來顯示圖片B,這樣就不需要重新開辟新的內(nèi)存,所以圖片B實(shí)際占用的內(nèi)存400KB。

   
   
   public final int getAllocationByteCount() {if(mRecycled) {return 0;}return nativeGetAllocationByteCount(mNativePtr);}

二、圖片的來源

  • Assets中的圖片

     asstes中的文件基本等同于我們從SDCard中加載的圖片,所以就不再單獨(dú)講解了。

舉個例子:我們以寬高為112px * 131px像素的png圖片為例(文件大小為20kb),如果我們使用下面的方式加載到內(nèi)存中:

BitmapFactory.decodeStream(assets.open("test.png"));

實(shí)際上展示的是:以ARGB_8888的格式加載到內(nèi)存中,那么最終的大小是112*131*4 = 58688KB。實(shí)際上就是我們圖片需要顯示的總的像素點(diǎn)數(shù)乘以單個像素點(diǎn)所占用的內(nèi)存,因為ARGB_8888,可以看出來一個像素的四個通道分別需要8位來描述,所以一個像素點(diǎn)需要4個字節(jié)的內(nèi)存,所以總的像素點(diǎn)數(shù)乘以4就是這張圖所占用的總內(nèi)存了。

所以,意味著圖片的內(nèi)存大小除了像素大小外,還和加載到內(nèi)存的格式有關(guān),比如我們將上面的圖片換成RGB_565去加載,那么我們得出的內(nèi)存就應(yīng)該是:112*131*[(5_6+5)/8] = 112*131*2 = 29344個字節(jié),足足比之前小了一半的大小。

  • Drawable目錄中的圖片

     當(dāng)我們將圖片放到不同的drawable目錄中,最后顯示出來占用的實(shí)際像素是有一定的縮放關(guān)系的,還是以112*131px的圖片為例:

如何在運(yùn)行時獲取Bitmap的大小

這么說吧,如果將上面的圖片放到hdpi目錄下,然后以ARGB_8888加載到內(nèi)存中占用的內(nèi)存大小算法就如下:

(112÷1.5)×(131÷1.5)× 3 × 4 = 77256字節(jié)

注意如果放在-nodpi中,那么圖片在不同DPI的設(shè)備中不會做任何縮放,都只會以112×131的像素顯示,所以在不同手機(jī)中永遠(yuǎn)占用相同的內(nèi)存。

三、優(yōu)化圖片占用的內(nèi)存體積

  • 使用inSampleSize對圖片進(jìn)行采樣、壓縮

  • 使用矩陣變化來改變圖片大小

  • 使用RGB_565來加載非透明圖片

  • 使用 9-patch圖片來做背景圖

  • 使用VectorDrawable

  • 能不用圖片就不用圖片

關(guān)于“如何在運(yùn)行時獲取Bitmap的大小”這篇文章的內(nèi)容就介紹到這里,感謝各位的閱讀!相信大家對“如何在運(yùn)行時獲取Bitmap的大小”知識都有一定的了解,大家如果還想學(xué)習(xí)更多知識,歡迎關(guān)注億速云行業(yè)資訊頻道。

向AI問一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進(jìn)行舉報,并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI