首先,存儲在磁盤上的圖片是被壓縮過的(以JPG,PNG或類似的格式存儲)。 一旦將圖片加載到內(nèi)存中,它就不再被壓縮,并占用盡可能多的圖片的所有像素所需的內(nèi)存空間。

創(chuàng)新互聯(lián)公司-專業(yè)網(wǎng)站定制、快速模板網(wǎng)站建設(shè)、高性價比靖安網(wǎng)站開發(fā)、企業(yè)建站全套包干低至880元,成熟完善的模板庫,直接使用。一站式靖安網(wǎng)站制作公司更省心,省錢,快速模板網(wǎng)站建設(shè)找我們,業(yè)務(wù)覆蓋靖安地區(qū)。費用合理售后完善,10多年實體公司更值得信賴。
其次,加載大圖的步驟:
1.獲取圖片的寬和高:BitmapFactory.Options
BitmapFactory可以為我們提供圖片的元數(shù)據(jù)。我們可以使用這個類來實現(xiàn)第一步。
BitmapFactory.Options options = new BitmapFactory.Options();
options.inJustDecodeBounds =true;//不想將圖片加載到內(nèi)存中。獲取圖片的相關(guān)信息(寬度,高度等),并使用這些信息來計算縮放比例。
BitmapFactory.decodeResource(getResources(), R.mipmap.hqimage, options);
2.根據(jù)圖片的寬和高計算縮放比Reducing Image Size (In Memory)
:現(xiàn)在我們需要計算 inSampleSize 。其是BitmapFactory.Options類的一個屬性,用于設(shè)置圖片的縮放比。
如果我們有一張尺寸為1000x1000的圖片,并且在解碼之前設(shè)置inSampleSize的值為2, 那么解碼之后,我們將得到一張尺寸為500x500的圖片。
BitmapFactory.Options options = new BitmapFactory.Options();options.inJustDecodeBounds =true;options.inSampleSize = 3; BitmapFactory.decodeResource(getResources(), R.mipmap.hqimage, options);
注意:inSampleSize 設(shè)置為 5 , 最終 會被 取整為 4
3.根據(jù)縮放比將圖片加載到內(nèi)存中。Reducing Image Size (In Disk)
我們還可以使用Bitmap的 compress 方法對磁盤上的圖片進行壓縮。我們來看看在不改變圖片質(zhì)量的情況下圖片被壓縮后的大小。? 100 表示與原圖保持相同的質(zhì)量。
ByteArrayOutputStream bos = new ByteArrayOutputStream();
bitmap.compress(Bitmap.CompressFormat.JPEG, 100, bos);
byte[] bitmapdata = bos.toByteArray();
通過計算得到圖片在磁盤上的大小為1.6 MB。
我們把compress方法中的質(zhì)量參數(shù)改為50,并再次計算圖片大小
bitmap.compress(Bitmap.CompressFormat.JPEG, 50, bos);
通過計算得到圖片在磁盤上的大小為24.4 KB。
注意 :在改變compress方法中的質(zhì)量參數(shù)的時候,壓縮格式應(yīng)該是.JPEG。設(shè)置為PNG格式的時候,修改是無效的。
由于Bitmap的特殊性以及Android對單個應(yīng)用所規(guī)定的最大內(nèi)存限制,我們在同時加載大量Bitmap時很容易發(fā)生內(nèi)存溢出,即我們通常所說的OutOfMemoryError(OOM),因此高效加載Bitmap就成為了每個Android開發(fā)者的必備技能。
在學(xué)習(xí)如何高效地加載Bitmap之前,首先介紹一下如何加載一個Bitmap。我們都知道,Bitmap在Android中通常指的是一張圖片,那么如何將JPG、PNG等格式的圖片轉(zhuǎn)換成Bitmap對象呢?BitmapFactory類給我們提供了一些方法:
接下來開始介紹如何高效地加載Bitmap,其實核心思想很簡單: 就是采用BitmapFactory.Options參數(shù)來調(diào)整圖片尺寸來適配控件的大小。
假如我們顯示圖片的控件ImageView寬高為100×100像素,而圖片的尺寸為1024×1024像素,這個時候如果將整個圖片加載進來并顯示到控件上,自然是很占用內(nèi)存資源的。這個時候可以通過BitmapFactory.Options按一定的采樣率加載縮小后的圖片,再將縮小后的圖片顯示到ImageView中,這樣就能減小內(nèi)存占用從而在一定程度上避免OOM的發(fā)生。
通過BitmapFactory.Options來縮放圖片,主要是使用它的inSampleSize參數(shù),也就是前面提到的采樣率。當(dāng)采樣率inSampleSize為1時,采樣后的圖片大小為原圖大小;當(dāng)采樣率inSampleSize1,比如為2時,采樣后的圖片寬高都為原圖的1/2,即像素降為原圖的1/4,占用的內(nèi)存大小也就是原圖的1/4;比較特殊的是,當(dāng)采樣率inSampleSize1時,系統(tǒng)會自動將該值當(dāng)做1來處理。 因此可以得出一個結(jié)論:采樣率inSampleSize必須是大于1的整數(shù)圖片才會有縮小的效果,并且采樣率同時作用于寬高,也就是說采樣后的圖片會縮小到原圖的1/(inSampleSize^2)。比如inSampleSize=4,那么縮放比例為1/16。
我們現(xiàn)在知道了,通過采樣率可以提高圖片的加載效率,那么如何才能計算出最合適的采樣率?我們可以按照如下流程:
接下來以decodeFile方法為例實現(xiàn)圖片的縮放,其他三個方法處理方式類似。
下一篇: Android 圖片加載(二)圖片加載框架Glide 入門篇
《Android開發(fā)藝術(shù)探索》
1.展示高分辨率圖片的時候,最好先將圖片進行壓縮
2.比例大小壓縮
3.質(zhì)量壓縮
4.使用圖片壓縮庫進行壓縮
5.如果加載的圖片太大,手機屏幕顯示不完,使用局部加載
網(wǎng)站題目:android圖片加載,安卓圖片加載
本文URL:http://chinadenli.net/article13/dsgeids.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供Google、關(guān)鍵詞優(yōu)化、微信公眾號、軟件開發(fā)、電子商務(wù)、標(biāo)簽優(yōu)化
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)