Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/elixir/2.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_Android Canvas_Crop - Fatal编程技术网

Android 位图区域内的徒手图像裁剪绘制

Android 位图区域内的徒手图像裁剪绘制,android,bitmap,android-canvas,crop,Android,Bitmap,Android Canvas,Crop,试图实现图像的徒手裁剪,因此我能够在图像上绘制。但它超出了位图区域。我只想限制用户只能在位图区域内绘制,请查看下面的屏幕截图 我正在尝试实现这样的功能 其图形位于视图区域之外,这会生成不正确的输出。 输出 代码@ 昂德劳 public void onDraw(画布){ final Rect Rect=new Rect(0,0,bitmap.getWidth(),bitmap.getHeight()); drawBitmap(位图,rect,rect,null); //rectfr=新的Rec

试图实现图像的徒手裁剪,因此我能够在图像上绘制。但它超出了位图区域。我只想限制用户只能在位图区域内绘制,请查看下面的屏幕截图

我正在尝试实现这样的功能

其图形位于视图区域之外,这会生成不正确的输出。

输出

代码@

昂德劳

public void onDraw(画布){
final Rect Rect=new Rect(0,0,bitmap.getWidth(),bitmap.getHeight());
drawBitmap(位图,rect,rect,null);
//rectfr=新的RectF();
//矩阵=新矩阵();
//矩阵mapRect(r);
//Log.i(标记“Rect”+r.left+“”+r.top+“”+r.right+“”)+
//r.bottom+“”);
//canvas.clipRect(右左,右上,右右下);
路径路径=新路径();
布尔值优先=真;
对于(int i=0;i
onCrop

Bitmap resultingImage=Bitmap.createBitmap(屏幕宽度、屏幕高度、位图1.getConfig());
画布画布=新画布(结果图像);
油漆=新油漆();
paint.setAntiAlias(真);
路径路径=新路径();
for(int i=0;i

建议我实现我的目标。

有一种方法可以实现你的目标

遵循以下步骤:

1) 使一个图像像作物图像的内部部分应该是透明的,外部部分应该是图像下方画布检查的背景

2) 在你的画布上画那个图像

3) 在画布上画任何东西,然后在画布上再画一次

图像:


您可以忽略图像视图之外的所有触摸事件。记住图像视图中的最后一个事件位置,并将其与视图中的下一个事件位置连接。当两个事件都是单个运动的一部分时(无需抬起手指),这应该可以起作用,但当在视图外部完成图形,然后在视图内部开始新图形时,情况可能会更复杂。尝试也涵盖此情况。

迟回答,但使用full for other u可以覆盖onmeasure方法,并在该方法中设置图像位图的宽度和高度,并调整画布大小,以便现在您只能在画布中绘制。因此,您的图像居中。它仅用于位图上的绘制路径

 @Override
public void onMeasure(int widthMeasureSpec, int heightMeasureSpec){
    super.onMeasure(widthMeasureSpec, heightMeasureSpec);

    height = bitmap.getHeight();
    width = bitmap.getWidth();

    setMeasuredDimension(width,height);
}
然后改变你的oncrop方法,这样你就可以很容易地解决它

Bitmap resultingImage = Bitmap.createBitmap(yourbitmap.getwidth(),yourbitmap.getheight(), yourbitmap.getConfig());
 @Override
public void onMeasure(int widthMeasureSpec, int heightMeasureSpec){
    super.onMeasure(widthMeasureSpec, heightMeasureSpec);

    height = bitmap.getHeight();
    width = bitmap.getWidth();

    setMeasuredDimension(width,height);
}
Bitmap resultingImage = Bitmap.createBitmap(yourbitmap.getwidth(),yourbitmap.getheight(), yourbitmap.getConfig());