Android縮放drawable
一、 相關概念
1. Drawable就是一個可畫的對象,其可能是一張位圖(BitmapDrawable),也可能是一個圖形(ShapeDrawable),還有可能是一個圖層(LayerDrawable),我們根據畫圖的需求,創建相應的可畫對象
2. Canvas畫布,繪制的目的區域,用于繪圖
3. Bitmap位圖,用于圖的處理
4. Matrix矩陣,此例中用于操作圖片
二、 步驟
1. 把drawable畫到位圖對象上
2. 對位圖對象做縮放(或旋轉等)操作
3. 把位圖再轉換成drawable
三、 示例
static Bitmap drawableToBitmap(Drawable drawable) // drawable 轉換成bitmap
{
int width = drawable.getIntrinsicWidth(); // 取drawable的長寬
int height = drawable.getIntrinsicHeight();
Bitmap.Config config = drawable.getOpacity() != PixelFormat.OPAQUE ? Bitmap.Config.ARGB_8888:Bitmap.Config.RGB_565; //取drawable的顏色格式
Bitmap bitmap = Bitmap.createBitmap(width, height, config); // 建立對應bitmap
Canvas canvas = new Canvas(bitmap); // 建立對應bitmap的畫布
drawable.setBounds(0, 0, width, height);
drawable.draw(canvas); // 把drawable內容畫到畫布中
return bitmap;
}
static Drawable zoomDrawable(Drawable drawable, int w, int h)
{
int width = drawable.getIntrinsicWidth();
int height= drawable.getIntrinsicHeight();
Bitmap oldbmp = drawableToBitmap(drawable); // drawable轉換成bitmap
Matrix matrix = new Matrix(); // 創建操作圖片用的Matrix對象
float scaleWidth = ((float)w / width); // 計算縮放比例
float scaleHeight = ((float)h / height);
matrix.postScale(scaleWidth, scaleHeight); // 設置縮放比例
Bitmap newbmp = Bitmap.createBitmap(oldbmp, 0, 0, width, height, matrix, true); // 建立新的bitmap,其內容是對原bitmap的縮放后的圖
return new BitmapDrawable(newbmp); // 把bitmap轉換成drawable并返回
}
}