Android縮放drawable
一、 相關(guān)概念
1. Drawable就是一個(gè)可畫的對(duì)象,其可能是一張位圖(BitmapDrawable),也可能是一個(gè)圖形(ShapeDrawable),還有可能是一個(gè)圖層(LayerDrawable),我們根據(jù)畫圖的需求,創(chuàng)建相應(yīng)的可畫對(duì)象
2. Canvas畫布,繪制的目的區(qū)域,用于繪圖
3. Bitmap位圖,用于圖的處理
4. Matrix矩陣,此例中用于操作圖片
二、 步驟
1. 把drawable畫到位圖對(duì)象上
2. 對(duì)位圖對(duì)象做縮放(或旋轉(zhuǎn)等)操作
3. 把位圖再轉(zhuǎn)換成drawable
三、 示例
static Bitmap drawableToBitmap(Drawable drawable) // drawable 轉(zhuǎn)換成bitmap
{
int width = drawable.getIntrinsicWidth(); // 取drawable的長(zhǎng)寬
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); // 建立對(duì)應(yīng)bitmap
Canvas canvas = new Canvas(bitmap); // 建立對(duì)應(yīng)bitmap的畫布
drawable.setBounds(0, 0, width, height);
drawable.draw(canvas); // 把drawable內(nèi)容畫到畫布中
return bitmap;
}
static Drawable zoomDrawable(Drawable drawable, int w, int h)
{
int width = drawable.getIntrinsicWidth();
int height= drawable.getIntrinsicHeight();
Bitmap oldbmp = drawableToBitmap(drawable); // drawable轉(zhuǎn)換成bitmap
Matrix matrix = new Matrix(); // 創(chuàng)建操作圖片用的Matrix對(duì)象
float scaleWidth = ((float)w / width); // 計(jì)算縮放比例
float scaleHeight = ((float)h / height);
matrix.postScale(scaleWidth, scaleHeight); // 設(shè)置縮放比例
Bitmap newbmp = Bitmap.createBitmap(oldbmp, 0, 0, width, height, matrix, true); // 建立新的bitmap,其內(nèi)容是對(duì)原bitmap的縮放后的圖
return new BitmapDrawable(newbmp); // 把bitmap轉(zhuǎn)換成drawable并返回
}
}