Bitmap內存分析與優(yōu)化

Bitmap內存分析

從Android提供的獲取bitmap內存大小api如下:


    /**
     * Returns the minimum number of bytes that can be used to store this bitmap's pixels.
     *
     * <p>As of {@link android.os.Build.VERSION_CODES#KITKAT}, the result of this method can
     * no longer be used to determine memory usage of a bitmap. See {@link
     * #getAllocationByteCount()}.</p>
     */
    public final int getByteCount() {
        // int result permits bitmaps up to 46,340 x 46,340
        return getRowBytes() * getHeight();
    }

以上代碼分析height就是原圖片的高谐鼎,而getRowBytes的值與bitmap格式有關棚亩,如果ARGB-8888 每個像素占8bit 總共32bit映屋,4字節(jié),所以需要*4,有關bitmap格式表對應的字節(jié)如下:

格式 描述 字節(jié)
ALPHA_8 只有一個alpha通道 每個像素占4bit 0.5
ARGB-4444 每個像素占四bit瘦穆,即A=4,R=4赊豌,G=4扛或,B=4 2
RGB-565 比較特殊 R=5 G=6 B=5 無ALPHA通道 2
ARGB-8888 每個像素占四bit,即A=8碘饼,R=8告喊,G=8,B=8 4

但是bitmap格式也只是以上決定因素之一派昧,另外還需要和屏幕分辨率(Density)有關黔姜。一般來說如果放在xxhdpi為480 三星手機的密度為640
所以公式為手機本身密度/圖片存放位置的密度*寬才能拿到他實際的寬,高也同理蒂萎。最后再加上精度問題之前的寬高需要+0.5f秆吵。所以最后得出來的公式:

(原圖片寬* 手機的密度 / 存放位置的密度(例如xhdpi)+0.5f)*
(原圖片高* 手機的密度 / 存放位置的密度(例如xhdpi)+0.5f)*
圖片格式(默認ARGB8888為4)=bitmap占用內存大小。

Bitmap內存優(yōu)化

使用inSampleSize

inSampleSize就是降低圖片的采樣率五慈,如果為2的話那加載的內存則會是原來的1/4纳寂。

jpg vs png

jpg屬于有損壓縮,而png屬于無損壓縮泻拦,毙芜,有損壓縮刪除一些圖像變化,讓人腦自己去補充争拐,所以體積會比有損小腋粥,但是造成的弊端顯而易見。有損壓縮一般人眼識別都都大致一樣但是有損壓縮在高分辨下打印出來就能看到明顯的損壞,而無損則不會有隘冲。另外jpg走的是rgb565 從內存方面考慮會比png(ARGB-8888)小一半左右闹瞧,但是這也要取決于圖片額內容。

兩者在選擇時候主要體現(xiàn)于:

  • 是否真的需要alpha通道
  • 用戶的cpu是否強勁展辞,jpg的有損壓縮算法會比png的無損更加耗時奥邮。
  • 看你的色值是否豐富,如果豐富請選擇jpg罗珍,如果只是作為背景可以選擇png洽腺。

使用矩陣

大圖小用用采樣,小圖大用用矩陣覆旱。

使用合理的圖片格式

ALPHA8 沒必要用蘸朋,因為他只有透明度沒有顏色。

ARGB4444 雖然占用內存只有 ARGB8888 的一半通殃,不過已經(jīng)被官方嫌棄度液。

ARGB8888 是最常用的,安卓bitmap默認是這種格式画舌。

RGB565 其實如果不需要 alpha 通道堕担,特別是資源本身為 jpg 格式的情況下,用這個格式比較理想曲聂。

使用自定義view

復寫ondraw方法去繪制圖形霹购。

參考文檔http://bugly.qq.com/bbs/forum.php?mod=viewthread&tid=498

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市朋腋,隨后出現(xiàn)的幾起案子齐疙,更是在濱河造成了極大的恐慌,老刑警劉巖旭咽,帶你破解...
    沈念sama閱讀 217,657評論 6 505
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件贞奋,死亡現(xiàn)場離奇詭異,居然都是意外死亡穷绵,警方通過查閱死者的電腦和手機轿塔,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,889評論 3 394
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來仲墨,“玉大人勾缭,你說我怎么就攤上這事∧垦” “怎么了俩由?”我有些...
    開封第一講書人閱讀 164,057評論 0 354
  • 文/不壞的土叔 我叫張陵,是天一觀的道長癌蚁。 經(jīng)常有香客問我幻梯,道長兜畸,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,509評論 1 293
  • 正文 為了忘掉前任礼旅,我火速辦了婚禮膳叨,結果婚禮上洽洁,老公的妹妹穿的比我還像新娘痘系。我一直安慰自己,他們只是感情好饿自,可當我...
    茶點故事閱讀 67,562評論 6 392
  • 文/花漫 我一把揭開白布汰翠。 她就那樣靜靜地躺著,像睡著了一般昭雌。 火紅的嫁衣襯著肌膚如雪复唤。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,443評論 1 302
  • 那天烛卧,我揣著相機與錄音佛纫,去河邊找鬼。 笑死总放,一個胖子當著我的面吹牛呈宇,可吹牛的內容都是我干的。 我是一名探鬼主播局雄,決...
    沈念sama閱讀 40,251評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼甥啄,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了炬搭?” 一聲冷哼從身側響起蜈漓,我...
    開封第一講書人閱讀 39,129評論 0 276
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎宫盔,沒想到半個月后融虽,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,561評論 1 314
  • 正文 獨居荒郊野嶺守林人離奇死亡灼芭,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 37,779評論 3 335
  • 正文 我和宋清朗相戀三年有额,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片姿鸿。...
    茶點故事閱讀 39,902評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡谆吴,死狀恐怖,靈堂內的尸體忽然破棺而出苛预,到底是詐尸還是另有隱情句狼,我是刑警寧澤,帶...
    沈念sama閱讀 35,621評論 5 345
  • 正文 年R本政府宣布热某,位于F島的核電站腻菇,受9級特大地震影響胳螟,放射性物質發(fā)生泄漏。R本人自食惡果不足惜筹吐,卻給世界環(huán)境...
    茶點故事閱讀 41,220評論 3 328
  • 文/蒙蒙 一糖耸、第九天 我趴在偏房一處隱蔽的房頂上張望盗迟。 院中可真熱鬧项棠,春花似錦雕凹、人聲如沸引镊。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,838評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽砖茸。三九已至侣诵,卻和暖如春希坚,著一層夾襖步出監(jiān)牢的瞬間边苹,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 32,971評論 1 269
  • 我被黑心中介騙來泰國打工裁僧, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留个束,地道東北人。 一個月前我還...
    沈念sama閱讀 48,025評論 2 370
  • 正文 我出身青樓聊疲,卻偏偏與公主長得像茬底,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子售睹,可洞房花燭夜當晚...
    茶點故事閱讀 44,843評論 2 354

推薦閱讀更多精彩內容