我正在编写一个android应用程序。通过使用它,用户可以裁剪位图图像。但我想添加更多功能,即在裁剪前旋转图像。我按照以下步骤来实现此目的。
- 建立了一个自定义视图。
- 初始化
BitmapDrawable()
和裁剪矩形(Rect()
)[矩形确定在位图中复制的位置] - 两个函数的覆盖
onTouch(MotionEvent)
方法- 一个。用户可以在屏幕上移动位图
- 湾。用户可以转换裁剪矩形
覆盖
onDraw(Canvas)
更新屏幕的方法。此代码用于显示位图。bitmap_drawable.draw(canvas,_bitmap_paint);
问题:1
我不知道该怎么做的这一步是正确显示旋转的。我使用此代码在
onDraw(Canvas)
方法中旋转画布。canvas.rotate(_angle);
但它使屏幕上的所有东西(包括裁剪矩形)都旋转。
问题2
初始化我自己的
Canvas()
对象以在其上绘制位图是一种明智的方法吗?笔记:
在这里,我想要的旋转非常精确到 1 度,并且是通过两指旋转手势执行的,所以性能非常重要,下面的代码(使用矩阵)很糟糕。
Matrix mat = new Matrix(); mat.preRotate(_degree, _one_finger_x, _one_finger_y); Bitmap _new_bitmap = Bitmap.createBitmap(_old_bitmap, 0, 0, bmWidth, bmHeight, mat, true);
因此,我认为单独初始化
Canvas()
和使用canvas.rotate(_degree)
是非常合适的。但是,这使得控制触摸事件变得非常困难。有什么想法吗?请帮忙。问题:2
假设我现在可以将位图与所有对象分开旋转,即裁剪矩形等。这一步是裁剪位图并有效地向用户显示裁剪结果。当不包含旋转功能时,我只是复制颜色字节在旧位图上的裁剪矩形内,如下所示。
Bitmap _new_bitmap = Bitmap.createBitmap( _old_bitmap, _cropRectx, _cropRecty, _cropRectWidth, _cropRectHeight, null);
但是在这里,从旋转的位图中,我如何通过交叉裁剪矩形克隆颜色字节?
问题2
如何裁剪旋转的位图?