Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/meteor/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在android中准确高效地旋转和裁剪位图_Android_Bitmap - Fatal编程技术网

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

在android中准确高效地旋转和裁剪位图,android,bitmap,Android,Bitmap,我正在编写一个android应用程序。通过使用它,用户可以裁剪位图图像。但我想添加更多功能,即在裁剪之前旋转图像。 为了达到这个目的,我遵循了以下步骤 构建自定义视图 已初始化BitmapDrawable()和裁剪矩形(Rect())[该矩形确定在位图中复制的位置] 覆盖两个函数的onTouch(MotionEvent)方法 a。用户可以在屏幕上移动位图 b。用户可以变换裁剪矩形 重写onDraw(Canvas)方法以更新屏幕。此代码用于显示位图 bitmap_drawable.draw(c

我正在编写一个android应用程序。通过使用它,用户可以裁剪位图图像。但我想添加更多功能,即在裁剪之前旋转图像。 为了达到这个目的,我遵循了以下步骤

  • 构建自定义视图
  • 已初始化
    BitmapDrawable()
    和裁剪矩形(
    Rect()
    )[该矩形确定在位图中复制的位置]
  • 覆盖两个函数的onTouch(MotionEvent)方法
    • a。用户可以在屏幕上移动位图
    • b。用户可以变换裁剪矩形
  • 重写onDraw(Canvas)方法以更新屏幕。此代码用于显示位图

    bitmap_drawable.draw(canvas,_bitmap_paint);
    
  • 问题:1 这一步,我不知道怎么做,是显示一个正确旋转的。我使用此代码在
    onDraw(canvas)
    方法中旋转画布

    canvas.rotate(_angle);
    
    但它会使屏幕上的所有东西(包括裁剪矩形)旋转

    问题:2 初始化我自己的
    Canvas()
    对象以绘制位图是否明智

    注: 在这里,我想要的旋转非常精确,最高可达1度,由两个手指旋转手势执行,因此性能非常重要,下面的代码(使用矩阵)很糟糕

    因此,我认为初始化一个单独的
    Canvas()
    并使用
    Canvas.rotate(_degree)
    是非常合适的。但是,这使得控制触摸事件非常困难。有什么想法吗?请帮助

  • 问题:2 假设我现在可以将位图与所有对象分开旋转,例如裁剪矩形等。此步骤是裁剪位图并将裁剪结果高效地显示给用户。如果不包括旋转功能,我只需将裁剪矩形内的颜色字节复制到旧位图上,如下所示

    Bitmap _new_bitmap = Bitmap.createBitmap( _old_bitmap, _cropRectx, _cropRecty, _cropRectWidth, _cropRectHeight, null);
    
    但是在这里,从一个旋转的位图,我如何通过交叉裁剪矩形克隆颜色字节

    问题:2 如何裁剪旋转位图


  • 这个问题可能太长,但它只包含两个问题:(i)显示旋转度不超过1的旋转位图的最佳方式是什么?(ii)如何裁剪旋转位图?有任何答案吗?请帮助。
    Bitmap _new_bitmap = Bitmap.createBitmap( _old_bitmap, _cropRectx, _cropRecty, _cropRectWidth, _cropRectHeight, null);