2

我正在编写一个android应用程序。通过使用它,用户可以裁剪位图图像。但我想添加更多功能,即在裁剪前旋转图像。我按照以下步骤来实现此目的。

  1. 建立了一个自定义视图。
  2. 初始化BitmapDrawable()和裁剪矩形(Rect())[矩形确定在位图中复制的位置]
  3. 两个函数的覆盖onTouch(MotionEvent)方法
    • 一个。用户可以在屏幕上移动位图
    • 湾。用户可以转换裁剪矩形
  4. 覆盖onDraw(Canvas)更新屏幕的方法。此代码用于显示位图。

    bitmap_drawable.draw(canvas,_bitmap_paint);
    
  5. 问题: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)是非常合适的。但是,这使得控制触摸事件变得非常困难。有什么想法吗?请帮忙。

  6. 问题:2

    假设我现在可以将位图与所有对象分开旋转,即裁剪矩形等。这一步是裁剪位图并有效地向用户显示裁剪结果。当不包含旋转功能时,我只是复制颜色字节在旧位图上的裁剪矩形内,如下所示。

    Bitmap _new_bitmap = Bitmap.createBitmap( _old_bitmap, _cropRectx, _cropRecty, _cropRectWidth, _cropRectHeight, null);
    

    但是在这里,从旋转的位图中,我如何通过交叉裁剪矩形克隆颜色字节?

    问题2

    如何裁剪旋转的位图?

4

0 回答 0