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