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);