1. 程式人生 > >圖片佔用記憶體計算方法

圖片佔用記憶體計算方法

Android中有四種,分別是:

ALPHA_8:每個畫素佔用1byte記憶體

ARGB_4444:每個畫素佔用2byte記憶體

ARGB_8888:每個畫素佔用4byte記憶體

RGB_565:每個畫素佔用2byte記憶體

Android預設的顏色模式為ARGB_8888,這個顏色模式色彩最細膩,顯示質量最高。但同樣的,佔用的記憶體也最大。

舉例說明一個32位的PNG也就是ARGB_8888,畫素是1204*1024,那麼佔用空間是:

1024*1024*(32/8)

因為8bit = 1 byte, 32位就是4byte. 我們在解析圖片的時候為了方式oom最好使用ARGB_4444模式. 節省一半的記憶體空間.

===================================================================

 Android中一張圖片(BitMap)佔用的記憶體主要和以下幾個因數有關:圖片長度,圖片寬度,單位畫素佔用的位元組數。 一張圖片(BitMap)佔用的記憶體=圖片長度*圖片寬度*單位畫素佔用的位元組數 圖片長度和圖片寬度的單位是畫素。 圖片(BitMap)佔用的記憶體應該和螢幕密度(Density)無關,雖然我暫時還拿不出直接證據。    建立一個BitMap時,其單位畫素佔用的位元組數由其引數BitmapFactory.Options
inPreferredConfig變數決定。 inPreferredConfig為Bitmap.Config型別,
Enum Values
ALPHA_8  Each pixel is stored as a single translucency (alpha) channel. 
This is very useful to efficiently store masks for instance. No color information is stored. With this configuration, each pixel requires 1 byte of memory.
此時圖片只有alpha值,沒有RGB值,一個畫素佔用一個位元組
ARGB_4444  This field is deprecated. Because of the poor quality of this configuration, it is advised to use instead.  
這種格式的圖片,看起來質量太差,已經不推薦使用。
Each pixel is stored on 2 bytes. The three RGB color channels and the alpha channel (translucency) are stored with a 4 bits precision (16 possible values.) This configuration is mostly useful if the application needs to store translucency information but also needs to save memory. It is recommended to use ARGB_8888 instead of this configuration.
一個畫素佔用2個位元組,alpha(A)值,Red(R)值,Green(G)值,Blue(B)值各佔4個bites,共16bites,即2個位元組
ARGB_8888  Each pixel is stored on 4 bytes. Each channel (RGB and alpha for translucency) is stored with 8 bits of precision (256 possible values.) This configuration is very flexible and offers the best quality. It should be used whenever possible
一個畫素佔用4個位元組,alpha(A)值,Red(R)值,Green(G)值,Blue(B)值各佔8個bites,共32bites,即4個位元組
這是一種高質量的圖片格式,電腦上普通採用的格式。它也是Android手機上一個BitMap的
預設格式。
RGB_565  Each pixel is stored on 2 bytes and only the RGB channels are encoded: red is stored with 5 bits of precision (32 possible values), green is stored with 6 bits of precision (64 possible values) and blue is stored with 5 bits of precision. This configuration can produce slight visual artifacts depending on the configuration of the source. For instance, without dithering, the result might show a greenish tint. To get better results dithering should be applied. This configuration may be useful when using opaque bitmaps that do not require high color fidelity.
一個畫素佔用2個位元組,沒有alpha(A)值,即不支援透明和半透明,Red(R)值佔5個bites ,Green(G)值佔6個bites  ,Blue(B)值佔5個bites,共16bites,即2個位元組.對於沒有透明和半透明顏色的圖片來說,該格式的圖片能夠達到比較的呈現效果,相對於ARGB_8888來說也能減少一半的記憶體開銷。因此它是一個不錯的選擇。另外我們通過android.content.res.Resources來取得一個張圖片時,它也是以該格式來構建BitMap的.
Android4.0開始,該選項無效。即使設定為該值,系統任然會採用 ARGB_8888來構造圖片
:ARGB指的是一種色彩模式,裡面A代表Alpha,R表示redG表示greenB表示blue,其實所有的可見色都是紅綠藍組成的,所以紅綠藍又稱為三原色。 A  R  G  B
透明度 紅色綠色藍色 簡單點說

 佔用記憶體的計算方向

 一張100*100的圖片佔用記憶體的大小

ALPHA_8

 圖片長度*圖片寬度

 100*100=10000位元組

ARGB_4444

 圖片長度*圖片寬度*2

 100*100*2=20000位元組

ARGB_8888

 圖片長度*圖片寬度*4

100*100*4=40000位元組

RGB_565 

 圖片長度*圖片寬度*2

100*100*2=20000位元組

另外,需要注意這裡的圖片佔用記憶體是指在Navtive中佔用的記憶體,當然BitMap使用的絕大多數記憶體就是該記憶體。 因為我們可以簡單的認為它就是BitMap所佔用的記憶體。   Bitmap物件在不使用時,我們應該先呼叫recycle(),然後才它設定為null. 雖然Bitmap在被回收時可以通過BitmapFinalizer來回收記憶體。但是呼叫recycle()是一個良好的習慣 在Android4.0之前,Bitmap的記憶體是分配在Native堆中,呼叫recycle()可以立即釋放Native記憶體。 從Android4.0開始,Bitmap的記憶體就是分配在dalvik堆中,即JAVA堆中的,呼叫recycle()並不能立即釋放Native記憶體。但是呼叫recycle()也是一個良好的習慣。 通過dumpsys meminfo命令可以檢視一個程序的記憶體使用情況, 當然也可以通過它來觀察我們建立或銷燬一張BitMap圖片記憶體的變化,從而推斷出圖片佔用記憶體的大小。 示例adb shell "dumpsys meminfocom.lenovo.robin" 執行結果。 Applications Memory Usage (kB): Uptime: 18696550 Realtime: 18696541 ** MEMINFO in pid 7985 [com.lenovo.robin] **                     native   dalvik    other    total             size:     4828     5379      N/A    10207        allocated:     4073     2852      N/A     6925             free:       10     2527      N/A     2537            (Pss):      608      317     1603     2528   (shared dirty):     2240     1896     6056    10192     (priv dirty):      548       36     1276     1860  Objects            Views:        0        ViewRoots:        0      AppContexts:        0       Activities:        0           Assets:        2    AssetManagers:        2    Local Binders:        5    Proxy Binders:       11 Death Recipients:        1  OpenSSL Sockets:        0  SQL                heap:        0         MEMORY_USED:        0  PAGECACHE_OVERFLOW:        0         MALLOC_SIZE:        0

相關推薦

圖片佔用記憶體計算方法

Android中有四種,分別是: ALPHA_8:每個畫素佔用1byte記憶體 ARGB_4444:每個畫素佔用2byte記憶體 ARGB_8888:每個畫素佔用4byte記憶體 RGB_565:每個畫素佔用2byte記憶體 Android預設的顏色模式為ARG

Java中物件佔用記憶體計算方法

普通物件的結構如下,按64位機器的長度計算1. 物件頭(_mark), 8個位元組2. Oop指標,如果是32G記憶體以下的,預設開啟物件指標壓縮,4個位元組3. 資料區4.Padding(記憶體對齊),按照8的倍數對齊陣列物件結構是1. 物件頭(_mark), 8個位元組2

Android中圖片佔用記憶體計算

本人的網易部落格原文 在Android開發中,我現在發現很多人還不會對圖片佔用記憶體進行很好的計算。因此撰寫該博文來做介紹,期望達到拋磚引玉的作用。   Android中一張圖片(BitMap)佔用的記憶體主要和以下幾個因數有關:圖片長度,圖片寬度,單位畫素佔用的位元組

android 圖片佔用記憶體大小及載入解析

*本篇文章已授權微信公眾號 guolin_blog (郭霖)獨家釋出 在講解圖片佔用記憶體前,我們先問自己幾個問題: 我們在對手機進行螢幕適時,常想可不可以只切一套圖適配所有的手機呢? 一張圖片載入到手機中,佔用記憶體到底有多少? 圖片佔用記憶體跟哪些東西

Android中對圖片記憶體優化方法

Android 中對於圖片的記憶體優化方法1. 對圖片本身進行操作儘量不要使用 setImageBitmap、setImageResource、BitmapFactory.decodeResource來

C/C++中結構體佔用記憶體大小的計算方法

引言 結構體在C語言中雖然經常使用,但是怎麼計算一個結構體佔用多大的記憶體,很多C語言的新手都沒注意過,其實C語言的語法簡單,難就難在它更偏向於與底層,與記憶體打交道。對於嵌入式方面來說,對C語言的要求更高,因為有些硬體的記憶體並不像我們使用的電腦的記憶體那麼充裕,所以需

計算兩張圖片相似度的方法總結

title rac 相似度 無法 tween hive any 明顯 embed python工具包-pyssim 簡介 python工具包,用來計算圖像之間的結構相似性 (Structural Similarity Image Metric: SSIM)。結構相似性介紹

載入大圖片記憶體的合理方法

圖形影象處理 先明確幾個概念。 1.關於單位:計算機中最小單位是位元bit,即一個0或者一個1,計 算機儲存檔案是以byte為單位,byte是位元組等於8個位元。 1M=1024kb;1kb=1024byte;1byte=8bit; 2.計算機如何表示圖形:以畫素為單位,組

w3wp.exe程序佔用記憶體過高解決方法

解決CPU佔用過多: 1、在IIS中對每個網站進行單獨的應用程式池配置。即互相之間不影響。 2、設定應用程式池的CPU監視,不超過25%(伺服器為4CPU),每分鐘重新整理,超過限制時關閉。 根據w3wp取得是哪一個應用程式池: 1、在工作管理員中增加顯示pid欄位。就可以看到佔用記憶體或者cpu最高

iOS 如何計算圖片載入記憶體中所佔的大小

首先圖片自動縮放到2的n次方大小,例如200 * 300畫素 會變成256 * 512大小。 圖片記憶體大小的計算公式 寬度 * 高度 * bytesPerPixel/8。 bytesPerPixel : 每個畫素所佔的位元組數。 RGB顏色空間下 每個顏色分量由8位組成

Android之帶你從原始碼解析Bitmap佔用記憶體正確的計算公式

Bitmap 前言 Bitmap簡介 畫素儲存方式 圖片壓縮格式 Bitmap記憶體計算 釋放記憶體 獲取Bitmap所佔記憶體 計算所佔記憶體 舉例 Bitmap.getAllo

檢視redis佔用記憶體大小的方法

檢視redis佔用記憶體大小的方法 redis-cli auth 密碼 info Memory used_memory:13490096 //資料佔用了多少記憶體(位元組) used_memory_human:12.87M //資料佔用了多少記憶體(帶單位的,可讀性好)

一張100px*100px的圖片記憶體中會佔用多大記憶體

    轉: http://www.cnblogs.com/YuangPong/p/6694512.html   在實際開發當中我們經常會忽視如題問題,只是知道圖片越小越好,甚至根本不知道如何計算,今天筆者就拋磚引玉一把!   Android中一張圖片(Bitmap)

C++中虛擬函式工作原理和 虛 繼承類的記憶體佔用大小計算

                      虛擬函式的實現要求物件攜帶額外的資訊,這些資訊用於在執行時確定該物件應該呼叫哪一個虛擬函式。典型情況下,這一資訊具有一種被稱為 vptr(virtual table pointer,虛擬函式表指標)的指標的形式。vptr 指向一個被稱為 vtbl(virtual t

每日新聞:中國母嬰幼市場將達3萬億;基於記憶體計算技術的智慧晶片問世;谷歌推圖片壓縮工具Squoosh;騰訊選定全球地圖資料提供商...

關注中國軟體網最新鮮的企業級乾貨聚集地趨勢洞察艾瑞諮詢:2020年中國母嬰童市場將達到3萬億元圖

Golang計算單個Goroutine佔用記憶體

一直在想單個Goroutine大概佔用多少記憶體呢?今天無意間在《Concurrency Go》中看到了這段計算單個Goroutine記憶體佔用大小的程式碼,分享給同樣有迷惑人。 在Win7 Go1.

Drawable與Bitmap佔用記憶體大小與比較decodeResource與decodeStream方法的效率

今天做了個記憶體優化的小測試,包括兩點 1, 比較Drawable與Bitmap佔用記憶體大小 2, 比較BitmapFactory類的decodeResource方法與decodeStream方法的效率 好吧,先來看第1個測試! 以下這個是測試載入1000個Drawable物件的程式碼

如何優化圖片佔用記憶體空間?

對於載入圖片,一般為了儘可能避免OOM都會按照如下做法: 對於圖片顯示:根據需要顯示圖片控制元件的大小對圖片進行壓縮顯示(取樣率inSampleSize及矩陣Matrix)。 如果圖片數量非常多:則會使用LruCache等快取機制,將所有圖片佔據的內容維持在一個範圍內。 其實對於圖片載

C# Winform應用程式佔用記憶體較大解決方法整理(轉)

原文:http://www.jb51.net/article/56682.htm 背景: 微軟的 .NET FRAMEWORK 現在可謂如火如荼了。但是,.NET 一直所為人詬病的就是“胃口太大”,狂吃記憶體,雖然微軟聲稱 GC 的功能和智慧化都很高,但是記憶體的回收

Java IO速度和佔用記憶體的極致優化方法,模板方法【從hdu 2602 說起】

談起java,給人的第一映像是什麼?除了簡單方便易上手,跨平臺可移植,各種函式庫支援類應有盡有不用重複造輪子這些特性之外,恐怕就是速度慢,佔用記憶體高了吧。不可否認,java執行速度和記憶體佔用方便確實無法比肩C/C++。隨手舉一個很直觀的栗子,在ACM等其他演算法競賽中,