Bitmap學習

1. 學習Bitmap之前的先需概念:

  • 屏幕像素:屏幕上像素點數(shù)宅倒,單位是px以故, 1px為1個像素點。
  • 屏幕尺寸:屏幕的對角線長度护锤,單位是英寸官地,1英寸=2.54cm。
  • 屏幕分辨率:屏幕縱橫向上的像素點數(shù)烙懦,單位是px驱入,格式:縱向像素*橫向像素 如1960*1080。
  • 屏幕像素密度:每英寸上面的像素點個數(shù)氯析,單位是dpi亏较,是“dot per inch”的縮寫。

補充:

  • 相同尺寸情況下掩缓,分辨率越高雪情,屏幕越清新,即屏幕像素密度越大你辣。
  • 屏幕密度計算方式:Density = 對角線上像素點/對角線尺寸巡通。

2. drawable不同目錄分辨率及系統(tǒng)dpi尘执、基準比例

ldpi mdpi hdpi xhdpi xxhdpi xxxhdpi
分辨率 240*320 320*480 480*800 720*1280 1080*1920 2160*3840
系統(tǒng)dpi 120 160 240 320 480 640
基準比例 0.75 1 1.5 2 3 4
  • 上表中系統(tǒng)dpi也是Density,對應著bitmap中bitmap.inDensity
  • 這里的基準比例是用于dp和px的換算

3. dp與px之間換算

首先需要理解三個概念:

名稱 含義
dp 安卓布局中相對大小
dpi 像素密度
px 像素點

dp的計算公式:

控件顯示像素(px) = 控件相對尺寸(dp) * 設備像素密度(dpi)/基準像素密度(dpi)

這里基準像素密度選擇160dpi扁达。

我們看下下面這段代碼:

 <ImageView
            android:id="@+id/imageView"
            android:layout_width="200dp"
            android:layout_height="200dp"
            android:layout_gravity="center"
            android:contentDescription="@string/app_name"
            android:scaleType="fitCenter" />

這里我們對此ImageView要求顯示尺寸:200dp * 200dp正卧,那我們先看下真正的顯示尺寸是多少?

WechatIMG2.png

上圖中可以看到:

  • targetWidth = 800,targetHeight = 800, 單位是px; 此參數(shù)表示真正顯示的尺寸跪解。
  • toTargetDensity = 640炉旷,單位是dpi; 此參數(shù)表示設備的dpi。

回頭我們?nèi)ヲ炞C一下公式:

  • ImageView尺寸相對大小 = 200dp
  • 當前設備像素密度 = 640dpi
  • 基準像素密度 = 160dpi
  • 顯示像素 = 800 px

驗證:800(px) = 200(dp) * 640(dpi) / 160 (dpi)

舉一反三:
在320x480分辨率叉讥,像素密度為160,1dp=1px
在480x800分辨率窘行,像素密度為240,1dp=1.5px

4. Bitmap顯示尺寸

Android 設備比較多,而且圖片分辨率比較多图仓。這里為了統(tǒng)一顯示罐盔,Android系統(tǒng)做了一些處理,這里介紹一下使用Bitmap將圖片進行映射不同設備上顯示救崔。步驟如下:

  • drawable不同目錄下的分辨率不一樣惶看,屏幕密度也不一樣,將圖片放到不同目錄中六孵。
  • 各個設備的分辨率不一樣纬黎,屏幕密度也不一樣。
  • 使用Bitmap可以將不同分辨率的圖片映射到相應的設備上劫窒。

計算公式:

width = pixWidth / inDensity * inTargetDensity
height = pixHeight / inDensity * inTargetDensity
注意:上述公式中/為“除”

名稱 含義
width/height 設備屏幕上寬度/高度
pixWidth/pixHeight 圖片實際寬度/高度
inDensity 圖片存放目錄下的像素密度
inTargetDensity 設備像素密度

注意:上表格中/為“或者”的意思

5. Bitmap內(nèi)存大小

Bitmap的內(nèi)存大小計算公式:

Bitmap的Memorysize = (pixWidth / inDensity * inTargetDensity) * (pixHeight / inDensity * inTargetDensity) * 一個像素的內(nèi)存大小本今。

注意:

  • pixWidth/pixHeight:實際像素的寬度/高度。
  • 一個像素的內(nèi)存大小和Bitmap的存儲的方式有關主巍。
  • 存儲方式有五種冠息,分別是ALPHA_8,RGB_565,ARGB_4444,ARGB_8888,RGBA_F16;
  • 枚舉定義在Bitmap.Config類中孕索。

不同存儲類型和內(nèi)存大小的關系如下圖:

存儲方式 內(nèi)存大小
ALPHA_8 1byte
RGB_565 2byte
ARGB_4444 4byte
ARGB_8888 4byte
RGBA_F16 4byte

下面是這四種類型的詳細解釋:

  • ALPHA_8:每個像素都需要1(8位)個字節(jié)的內(nèi)存逛艰,只存儲位圖的透明度,沒有顏色信息

  • RGB_565:同理搞旭,R占5位精度瓮孙,G占6位精度,B占5位精度选脊,一共是16位精度,折合兩個字節(jié)脸甘。這里注意的時恳啥,這個類型存儲的只是顏色信息,沒有透明度信息

  • ARGB_4444:A(Alpha)占4位的精度丹诀,R(Red)占4位的精度钝的,G(Green)占4位的精度翁垂,B(Blue)占4位的精度,加起來一共是16位的精度硝桩,折合是2個字節(jié)沿猜,也就是一個像素占兩個字節(jié)的內(nèi)存,同時存儲位圖的透明度和顏色信息碗脊。不過由于該精度的位圖質(zhì)量較差啼肩,官方不推薦使用

  • ARGB_8888:這個類型的跟ARGB_4444的原理是一樣的,只是A,R,G,B各占8個位的精度衙伶,所以一個像素占4個字節(jié)的內(nèi)存祈坠。由于該類型的位圖質(zhì)量較好,官方特別推薦使用矢劲。但是赦拘,如果一個480*800的位圖設置了此類型,那個它占用的內(nèi)存空間是:480*800*4/(1024*1024)=1.5M

  • RGBA_F16:每個像素用8位存儲芬沉,每個通道(RGBA)使用半精度(16位)存儲躺同,此類型適用于寬色域和HDR內(nèi)容

最后編輯于
?著作權歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市丸逸,隨后出現(xiàn)的幾起案子蹋艺,更是在濱河造成了極大的恐慌,老刑警劉巖椭员,帶你破解...
    沈念sama閱讀 207,248評論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件车海,死亡現(xiàn)場離奇詭異,居然都是意外死亡隘击,警方通過查閱死者的電腦和手機侍芝,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,681評論 2 381
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來埋同,“玉大人州叠,你說我怎么就攤上這事⌒琢蓿” “怎么了咧栗?”我有些...
    開封第一講書人閱讀 153,443評論 0 344
  • 文/不壞的土叔 我叫張陵,是天一觀的道長虱肄。 經(jīng)常有香客問我致板,道長,這世上最難降的妖魔是什么咏窿? 我笑而不...
    開封第一講書人閱讀 55,475評論 1 279
  • 正文 為了忘掉前任斟或,我火速辦了婚禮,結果婚禮上集嵌,老公的妹妹穿的比我還像新娘萝挤。我一直安慰自己御毅,他們只是感情好,可當我...
    茶點故事閱讀 64,458評論 5 374
  • 文/花漫 我一把揭開白布怜珍。 她就那樣靜靜地躺著端蛆,像睡著了一般。 火紅的嫁衣襯著肌膚如雪酥泛。 梳的紋絲不亂的頭發(fā)上今豆,一...
    開封第一講書人閱讀 49,185評論 1 284
  • 那天,我揣著相機與錄音揭璃,去河邊找鬼晚凿。 笑死,一個胖子當著我的面吹牛瘦馍,可吹牛的內(nèi)容都是我干的歼秽。 我是一名探鬼主播,決...
    沈念sama閱讀 38,451評論 3 401
  • 文/蒼蘭香墨 我猛地睜開眼情组,長吁一口氣:“原來是場噩夢啊……” “哼燥筷!你這毒婦竟也來了?” 一聲冷哼從身側響起院崇,我...
    開封第一講書人閱讀 37,112評論 0 261
  • 序言:老撾萬榮一對情侶失蹤肆氓,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后底瓣,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體谢揪,經(jīng)...
    沈念sama閱讀 43,609評論 1 300
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,083評論 2 325
  • 正文 我和宋清朗相戀三年捐凭,在試婚紗的時候發(fā)現(xiàn)自己被綠了拨扶。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 38,163評論 1 334
  • 序言:一個原本活蹦亂跳的男人離奇死亡茁肠,死狀恐怖患民,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情垦梆,我是刑警寧澤匹颤,帶...
    沈念sama閱讀 33,803評論 4 323
  • 正文 年R本政府宣布,位于F島的核電站托猩,受9級特大地震影響印蓖,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜京腥,卻給世界環(huán)境...
    茶點故事閱讀 39,357評論 3 307
  • 文/蒙蒙 一另伍、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦摆尝、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,357評論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至晃琳,卻和暖如春讯检,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背卫旱。 一陣腳步聲響...
    開封第一講書人閱讀 31,590評論 1 261
  • 我被黑心中介騙來泰國打工人灼, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人顾翼。 一個月前我還...
    沈念sama閱讀 45,636評論 2 355
  • 正文 我出身青樓投放,卻偏偏與公主長得像,于是被迫代替她去往敵國和親适贸。 傳聞我的和親對象是個殘疾皇子灸芳,可洞房花燭夜當晚...
    茶點故事閱讀 42,925評論 2 344

推薦閱讀更多精彩內(nèi)容