Bitmap是什么
Bitmap的基本思想就是用一個bit位來標記某個元素對應的Value,而Key即是該元素。由于采用了Bit為單位來存儲數據,因此在存儲空間方面,可以大大節省。
Bitmap 是位圖信息的存儲,即?個矩形圖像每個像素的顏?信息的存儲器。
Android從基礎底層到架構成長的全套筆記,有需要完整版的朋友,可留言【Android】領取!
Drawable是什么
Drawable是一種可以在Canvas上進行繪制的抽象的概念,顏色、圖片等都可以是一個Drawable。Drawable可以通過XML定義,或者通過代碼創建。Android中Drawable是一個抽象類,每個具體的Drawable都是其子類。簡單來講,其可以理解為:圖像。
Drawable 內部存儲的是繪制規則,這個規則可以是?個具體的 Bitmap,也可以是?個純粹的顏?,甚?可以是?個抽象的、靈活的描述。Drawable 可以不含有具體的像素信息,只要它含有的信息?以在 draw(Canvas) ?法被調?時進?繪制就夠了。由于 Drawable 存儲的只是繪制規則,因此在它的 draw() ?法被調?前,需要先調? Drawable.setBounds() 來為它設置繪制邊界。
Drawable的優點:
- 使用簡單,比自定義View成本低
- 非圖片類的drawable所占空間小,能減小apk大小
Bitmap和Drawable的相互轉換
//drawable convert bitmap public static Bitmap drawableToBitmap(Drawable drawable) { Bitmap bitmap = null; if (drawable instanceof BitmapDrawable) { BitmapDrawable bitmapDrawable = (BitmapDrawable) drawable; if (bitmapDrawable.getBitmap() != null) { return bitmapDrawable.getBitmap(); } } if ((drawable.getIntrinsicWidth() <= 0) || (drawable.getIntrinsicHeight() <= 0)) { bitmap = Bitmap.createBitmap(1, 1, Bitmap.Config.ARGB_8888); } else { bitmap = Bitmap.createBitmap(drawable.getIntrinsicWidth(), drawable.getIntrinsicHeight(), Bitmap.Config.ARGB_8888); } Canvas canvas = new Canvas(bitmap); drawable.setBounds(0, 0, canvas.getWidth(), canvas.getHeight()); drawable.draw(canvas); return bitmap; } //bitmap convert drawable public static Drawable bitmapToDrawable(Context context, Bitmap bitmap) { return new BitmapDrawable(context.getResources(), bitmap); }
事實上,由于 Bitmap 和 Drawable 是兩個不同的概念,因此確切地說它們并不是互相「轉換」,?是從其中?個獲得另?個的對象:
- Bitmap -> Drawable:創建?個 BitmapDrawable。
- Drawable -> Bitmap:如果是 BitmapDrawable,使?BitmapDrawable.getBitmap() 直接獲取;如果不是,創建?個 Bitmap和?個 Canvas,使? Drawable 通過 Canvas 把內容繪制到 Bitmap 中。
作者:Arrom
轉載平臺:掘金
鏈接:
https://juejin.cn/post/7126798240573292558