招生熱線
0755-86191118 0755-86191118
我的位置: 首頁(yè) > 學(xué)習(xí)專區(qū) > 安卓技術(shù) > 深圳嘉華Android開(kāi)發(fā)教程之Bitmap最優(yōu)加載

深圳嘉華Android開(kāi)發(fā)教程之Bitmap最優(yōu)加載

2016-09-23 12:21:06
來(lái)源:北大青鳥(niǎo)深圳嘉華學(xué)校
[導(dǎo)讀] 這里北大青鳥(niǎo)深圳嘉華學(xué)校為大家搜羅了Android開(kāi)發(fā)教程之Bitmap最優(yōu)加載。說(shuō)到圖片的加載就必須說(shuō)BitmapFactory,看名字就知道他的作用了,就是一個(gè)生產(chǎn)Bitmap的工廠,下圖是它的一些工廠方法:從上圖可以看到BitmapFactory可以使用存儲(chǔ)Bitmap數(shù)據(jù)的數(shù)組,Bitmap的資源ID,Bitmap文件
這里北大青鳥(niǎo)深圳嘉華學(xué)校為大家搜羅了Android開(kāi)發(fā)教程之Bitmap最優(yōu)加載。
說(shuō)到圖片的加載就必須說(shuō)BitmapFactory,看名字就知道他的作用了,就是一個(gè)生產(chǎn)Bitmap的工廠,下圖是它的一些工廠方法:
深圳嘉華Android開(kāi)發(fā)教程之Bitmap最優(yōu)加載
從上圖可以看到BitmapFactory可以使用存儲(chǔ)Bitmap數(shù)據(jù)的數(shù)組,Bitmap的資源ID,Bitmap文件等做為數(shù)據(jù)源來(lái)創(chuàng)建Bitmap對(duì)象,具體情況看你程序中提供的數(shù)據(jù)源是哪一種。這些方法中對(duì)每一種數(shù)據(jù)源都提供了兩個(gè)方法,這里需要注意一下BitmapFacotry.Options參數(shù),這個(gè)參數(shù)很重要,因?yàn)樗軌驑O大的減少你對(duì)內(nèi)存的消耗。
BitmapFacotry.Options的InJustDecodeBounds 參數(shù)使用:
為了節(jié)省內(nèi)存,很多情況下原圖片都要經(jīng)過(guò)縮放處理,根據(jù)控件的尺寸來(lái)處理成對(duì)應(yīng)尺寸的圖片,這時(shí)使用BitmapFactory創(chuàng)建Bitmap,很多情況下都會(huì)使用下面的代碼:
深圳嘉華Android開(kāi)發(fā)教程之Bitmap最優(yōu)加載
注意上面中的options.inJustDecodeBounds =true的inJustDecodeBounds參數(shù),為了避免我翻譯的不準(zhǔn)確我這里先貼出來(lái)google的原文:
If set to true, the decoder will return null (no bitmap), but the out... fields will still be set, allowing the caller to query the bitmap without having to allocate the memory for its pixels。
用我的話來(lái)說(shuō)就是在decode的時(shí)候不給這個(gè)bitmap的像素區(qū)分配內(nèi)存,除了這個(gè)區(qū)別Bitmap的其他信息你都能獲取到。這樣就有很大的意義,你既沒(méi)有消耗內(nèi)存又拿到了圖片的信息,為你下一步圖片處理提供幫助。
BitmapFacotry.Options的InSampleSize參數(shù)使用:
上一步你已經(jīng)獲取到圖片的原始尺寸了,下一步就是要把原圖縮放到你需要的大小,可以通過(guò)inSampleSize參數(shù)來(lái)設(shè)置,google原文的解釋是:
If set to a value > 1, requests the decoder to subsample the original image, returning a smaller image to save memory. The sample size is the number of pixels in either dimension that correspond to a single pixel in the decoded bitmap. For example, inSampleSize == 4 returns an image that is 1/4 the width/height of the original, and 1/16 the number of pixels. Any value <= 1 is treated the same as 1. Note: the decoder will try to fulfill this request, but the resulting bitmap may have different dimensions that precisely what has been requested. Also, powers of 2 are often faster/easier for the decoder to honor.(不管你看不看英文文檔我還是要把google原文貼出來(lái),我英文比較爛,翻譯的不一定準(zhǔn)確)
大概意思就是說(shuō)這個(gè)參數(shù)可以調(diào)節(jié)你在decode原圖時(shí)所需要的內(nèi)存,有點(diǎn)像采樣率,會(huì)丟掉一些像素,值是大于1的數(shù),為2的冪時(shí)更利于運(yùn)算。舉個(gè)例子:當(dāng) inSampleSize == 4 時(shí)會(huì)返回一個(gè)尺寸(長(zhǎng)和寬)是原始尺寸1/4,像素是原來(lái)1/16的圖片。這個(gè)值怎么計(jì)算呢?
深圳嘉華Android開(kāi)發(fā)教程之Bitmap最優(yōu)加載
在decode的時(shí)候先設(shè)置options.inJustDecodeBounds =true,獲取到圖片參數(shù)后再設(shè)置為false,這就是decode時(shí)的技巧,下面就把完整代碼貼出來(lái),可以作為工具方法來(lái)使用:
深圳嘉華Android開(kāi)發(fā)教程之Bitmap最優(yōu)加載
上面的方法來(lái)自于google官網(wǎng),沒(méi)必要進(jìn)行修改,這就是程序員的拿來(lái)主義吧,關(guān)鍵在于要知道為什么這么寫(xiě)。下面是我自己寫(xiě)的一個(gè)方法可以直接拿來(lái)當(dāng)工具用。
深圳嘉華Android開(kāi)發(fā)教程之Bitmap最優(yōu)加載
以上就是Bitmap在Android中加載到內(nèi)存中的一些小技巧,大家是不是以后就能很好的應(yīng)用起來(lái),避免因?yàn)榧虞d圖片引起OOM這樣的問(wèn)題呢?
評(píng)論
好吊妞免费视频在线观看,久久亚洲国产人成综合网,久久精品国产2020,欧美精品综合在线
午夜精品久久久久久久第一页 | 在线视频国产亚洲欧美一区不卡 | 色无月激情五月在线观看 | 亚洲一区在线曰日韩在线 | 亚洲日韩欧美国产动漫第二区 | 日本野外强奷在线播放97 |