android 利用canvas 獲取裁切或者合併後的bitmap對象

1  圖片裁切

    備註:創建圖片還是很耗內存的,所以不論是圖片的合併還是裁切都比較耗內存,利用canvas還是可以以節       約內存的方式實現

       mBitWidth 爲原圖寬度,mBitheight爲原圖高度

       mSrcbmp = bitmap;  //原圖bitmap對象
       mBitWidth = mSrcbmp.getWidth();
       mBitheight = mSrcbmp.getHeight();

//圖片裁切canvas方式(下面是一張圖片裁切爲4張小圖均可返回bitmap對象)
private Bitmap cutBitmap() {
	Bitmap bitmap = Bitmap.createBitmap(mBitWidth / 2, mBitheight / 2, Config.RGB_565);
	Canvas canvas = new Canvas(bitmap);
	Rect src1 = new Rect(0, 0, mBitWidth / 2, mBitheight / 2);   
	Rect sr2 = new Rect(mBitWidth / 2, 0, mBitWidth, mBitheight / 2);   
	Rect src3 = new Rect(0, mBitheight / 2, mBitWidth / 2, mBitheight); 
	Rect src4 = new Rect(mBitWidth / 2, mBitheight / 2, mBitWidth, mBitheight); 
	Rect dsc = new Rect(0, 0, mBitWidth / 2, mBitheight / 2);   
	canvas.drawBitmap(mSrcbmp, src4, dsc, mPaint);  
	return bitmap;
}

接着在ondraw下面繪製

Rect rect1 = new Rect(0, 0, mBitWidth / 2, mBitheight / 2); 
canvas.drawBitmap(cutBitmap(), null, rect1, mPaint);


圖片合併canvas方式,直接在ondraw()函數下繪製,但只起到顯示作用,如何得到合併後的bitmap對象呢,如下例:

Rect rect1 = new Rect(0, 0, mBitWidth, mBitheight); 
Rect rect2 = new Rect(mBitWidth, 0, mBitWidth * 2, mBitheight);  
canvas.drawBitmap(mSrcbmp, null, rect1, mPaint);//在 0,0座標開始畫入src  
canvas.drawBitmap(mSrcbmp, null, rect2, mPaint);

canvas方式獲取合併後的bitmap對象

private Bitmap mergeBitmap() {
	Rect rect1 = new Rect(0, 0, mBitWidth, mBitheight); 
	Rect rect2 = new Rect(mBitWidth, 0, mBitWidth * 2, mBitheight);   
	Bitmap bitmap = Bitmap.createBitmap(mBitWidth * 2, mBitheight, Config.RGB_565);
	Canvas canvas = new Canvas(bitmap);
	canvas.drawBitmap(mSrcbmp, null, rect1, mPaint);
	canvas.drawBitmap(mSrcbmp, null, rect2, mPaint);
	return bitmap;
}

接着在ondraw()函數下繪製

Rect rect1 = new Rect(0, 0, mBitWidth * 2, mBitheight); 
canvas.drawBitmap(mergeBitmap(), null, rect1, mPaint);






發佈了50 篇原創文章 · 獲贊 148 · 訪問量 29萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章