在android中准确有效地旋转和裁剪位图

时间:2012-10-17 09:51:41

标签: android bitmap

我正在编写一个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

    如何裁剪旋转的位图?

0 个答案:

没有答案