Android畫圖之Bitmap

Android畫圖之Bitmap(一)

把一個 Bitmap 畫到 View 上,必須用到的類有 android.graphics.Canvas, android.graphics.Bitmap 。方法很簡單,在 View 裏面,重載 onDraw(Canvas canvas) 方法,而後用 canvas.drawBitmap() 方法,將其畫在屏幕上。 java

public class MyView extends View {
	
	private Bitmap mBitmap;
	
	public MyView(Context context) {
		super(context);
		initialize();
	}

	private void initialize() {
		
		Bitmap bmp = ((BitmapDrawable)getResources().getDrawable(R.drawable.show)).getBitmap();
		
		mBitmap = bmp;
		
	}
	
	@Override protected void onDraw(Canvas canvas) {
//		super.onDraw(canvas);  //固然,若是界面上還有其餘元素須要繪製,只須要將這句話寫上就好了。
		canvas.drawBitmap(mBitmap, 0, 0, null);
	}
}
結果:

結果

原圖: android

原圖


然這僅僅只是第一步,可是很鼓舞人心呢,呵呵。 canvas

上面是直接將原圖畫在屏幕上,沒有任何處理,由於圖片比屏幕大,因此超出的部分看不到。咱們試着將圖片拉伸以填滿整個屏幕。 ide

public class MyView extends View {
	
	private Bitmap mBitmap;
	private Matrix mMatrix = new Matrix();
	
	private static int mScreenWidth;
	private static int mScreenHeight;
	
	public MyView(Context context) {
		super(context);
		initialize();
	}

	private void initialize() {
		DisplayMetrics dm = getResources().getDisplayMetrics();
		mScreenWidth = dm.widthPixels;
		mScreenHeight = dm.heightPixels;
		
		Bitmap bmp = ((BitmapDrawable)getResources().getDrawable(R.drawable.show)).getBitmap();
		mBitmap = Bitmap.createScaledBitmap(bmp, mScreenWidth, mScreenHeight, true);		
	}
	
	@Override protected void onDraw(Canvas canvas) {
//		super.onDraw(canvas);  //固然,若是界面上還有其餘元素須要繪製,只須要將這句話寫上就好了。
		canvas.drawBitmap(mBitmap, 0, 0, null);
	}
}


顯示結果: spa

充滿屏幕

下面一篇將介紹對Bitmap的一些操做。 code

Android畫圖之Bitmap(二) 對象

Android畫圖之Bitmap(一) 介紹了簡單的把 Bitmap 畫到屏幕上,以及縮放 Bitmap 以鋪滿屏幕。對 Bitmap 的操做還有不少。好比截取 Bitmap 的部分區域,能夠使用 blog

mBitmap = Bitmap.createBitmap(bmp, 100, 100, 120, 120);



這句代碼從 bmp (100,100) 處截取 120*120 像素區域放到新的 Bitmap 中。

縮放一個 Bitmap ,前面一篇已經涉及到了,能夠用 Bitmap.createScaledBitmap() 方 法根據給定的 Bitmap 建立 一個新的,縮放後的 Bitmap 圖片

Bitmap mBitmap = Bitmap.createScaledBitmap(bmp, mScreenWidth, mScreenHeight, true);
其中 mScreenWidth mScreenHeight 是屏幕的寬度和高度,這裏就將 bmp 拉伸到整個屏幕。

每次 createBitmap ,都會分配新的內存,帶來資源的 消耗,因此用 Bitmap createBitmap 雖然簡單方便,可是不是最優方 法。介紹一個比較好點的方法,不用建立新的 Bitmap ,用 Canvas 在畫的時候直接縮放或者剪切。 內存

canvas.drawBitmap(mBitmap, null, new Rect(0, 0, 200, 200), null);
這裏的 Rect 對象表示一個矩形區域,從 (0,0) (200,200) 之間的矩形區域。這段代碼將把 mBitmap 縮放並繪製到屏幕上的 (0,0) (200,200) 之間的區域。

個方法還有第二個參數我給的是 null ,其實這個參數也是個 Rect 對象,表示源 Rect 。把圖片的某個區域拿出來畫到屏幕的指定區域。

canvas.drawBitmap(mBitmap, new Rect(100, 100, 300, 300), new Rect(100, 100, 200, 200), null);
這裏將 mBitmap (100,100) (300,300) 區域拿出來,自動縮放並畫到屏幕的 (100,100) (200,200) 區域。

對於 Bitmap 的處理,上面介紹的 是最簡單的兩種,平移和縮放。而要是須要更復雜的處理,好比旋轉和傾斜,就得使用 Matrix 了。下面幾篇將介紹 Matrix 在畫圖中的使用。

相關文章
相關標籤/搜索