Android常用的Drawable和Bitmap之間的轉化方法
阿新 • • 發佈:2019-02-08
bitmap和Drawable間的區別:
Bitmap - 稱作點陣圖,一般點陣圖的檔案格式字尾為bmp,當然編碼器也有很多如RGB565、RGB888。作為一種逐畫素的顯示物件執行效率高,但是缺點也很明視訊記憶體儲效率低。我們理解為一種儲存物件比較好。
Drawable - 作為Android平下通用的圖形物件,它可以裝載常用格式的影象,比如GIF、PNG、JPG,當然也支援BMP,當然還提供一些高階的視覺化物件,比如漸變、圖形等。
兩者間的簡單對比:
Drawable在記憶體佔用和繪製速度這兩個非常關鍵的點上勝過Bitmap;
我們經常會遇到需要在程式碼中獲取資原始檔下圖片的問題:
Bitmap bmp = BitmapFactory.decodeResource(getResources(),R.drawable.ic );
或者:
Drawable drawable = getResources().getDrawable(R.drawable.ic);
或者:
iv.setImageResource(R.drawable.ic_launcher);
獲取路徑下的圖片資源:
String fileName = "/data/data/com.test/aa.png;
Bitmap bm = BitmapFactory.decodeFile(fileName);
iv.setImageBitmap(bm); //佔用記憶體
下面來看看兩者間的轉換:
Drawable ----->Bitmap:
第一種:
BitmapDrawable bd = (BitmapDrawable) drawable;
Bitmap bm= bd.getBitmap();
第二種:
public static Bitmap drawableToBitmap(Drawable drawable) { // 取 drawable 的長寬 int w = drawable.getIntrinsicWidth(); int h = drawable.getIntrinsicHeight(); // 取 drawable 的顏色格式 Bitmap.Config config = drawable.getOpacity() != PixelFormat.OPAQUE ? Bitmap.Config.ARGB_8888 : Bitmap.Config.RGB_565; // 建立對應 bitmap Bitmap bitmap = Bitmap.createBitmap(w, h, config); // 建立對應 bitmap 的畫布 Canvas canvas = new Canvas(bitmap); drawable.setBounds(0, 0, w, h); // 把 drawable 內容畫到畫布中 drawable.draw(canvas); return bitmap; }
Bitmap--------> Drawable:
第一種:
Drawable drawable = new BitmapDrawable(bitmap);
第二種:
BitmapDrawable bd= new BitmapDrawable(getResource(), bm);
BitmapDrawable是Drawable的子類,可以直接使用;
對於圖片壓縮和儲存的知識點: