在android中对图像进行手绘裁剪

Posted

技术标签:

【中文标题】在android中对图像进行手绘裁剪【英文标题】:Freehand cropping on the image in android 【发布时间】:2013-10-17 04:53:13 【问题描述】:

我正在 android 中实现对图像的徒手裁剪。我可以使用触摸在图像上绘制任意形状并收集数组列表中路径上的所有点。但我无法提取任意形状内的图像部分。

我搜索了很多,但找不到合适的答案。是否有任何机构有这方面的工作示例。

编辑:我可以使用位图上的以下代码创建任意形状。

@Override
protected void onDraw(Canvas canvas) 


    canvas.drawBitmap(scaledBitmap, 0, 0,null);
    path.reset();


    boolean firstTouchPoint = true;

    for (int i = 0; i < lastPath.size(); i += 2) 
        Point point = lastPath.get(i);

        if (firstTouchPoint) 
            firstTouchPoint = false;
            path.moveTo(point.fXPosition, point.fYPosition);
         else if (i < lastPath.size() - 1) 
            Point next = lastPath.get(i + 1);
            path.quadTo(point.fXPosition, point.fYPosition, next.fXPosition, next.fYPosition);
         else 
            path.lineTo(point.fXPosition, point.fYPosition);
        
    

    canvas.drawPath(path, paint); 



但我无法提取此路径内的位图区域。

【问题讨论】:

你能发布你的代码吗?假设您有一个用于绘制的自定义形状的 Path 对象是否安全? 我已经编辑了我的帖子。上面的代码显示我有自定义形状的路径。现在我想提取路径内的形状。 请使用您尝试用于提取任意形状内区域的代码更新您的帖子,并解释该代码出了什么问题。 我试图使用这篇文章提取路径内的区域:***.com/questions/8993292/… 但我不知道在哪里放置此代码,以便在创建路径后,裁剪后的图像将显示在我的屏幕上 【参考方案1】:

你应该试试这个:

//the image should support transparency.
Bitmap scaledBitmap = Bitmap.createBitmap(width, height,Bitmap.Config.ARGB_8888);
// fill the area around the path with alpha
Canvas c = new Canvas(scaledBitmap);
c.clipPath(path, Region.Op.DIFFERENCE);
c.drawColor(0x00000000, PorterDuff.Mode.CLEAR);

【讨论】:

感谢您的回复。但是 c.clipPath 不能在硬件上工作,因为它需要关闭硬件加速。您能否告诉我在屏幕上绘制路径后,我应该在哪里编写要渲染的这部分代码。 把这段代码放在里面可能点击Crop Image按钮。因此,在用户单击按钮后,运行此代码。然后更新您的 imageview 以显示裁剪后的图像。正如您提到的硬件加速,我认为您应该看看这个并考虑是否要保持它打开或关闭。 ***.com/questions/8895677/…

以上是关于在android中对图像进行手绘裁剪的主要内容,如果未能解决你的问题,请参考以下文章

android如何使用现有图像进行裁剪

如何在 Android 相机上使用意图添加功能裁剪图像?

Android 从 Intent 获取裁剪图像的 URI

裁剪后的Android图像视图仅显示小图像

裁剪不显示图像且不工作 - android

Android - 从多点裁剪图像