【问题标题】:Freehand cropping on the image in android在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 对象是否安全?
  • 我已经编辑了我的帖子。上面的代码显示我有自定义形状的路径。现在我想提取路径内的形状。
  • 请使用您尝试用于提取任意形状内区域的代码更新您的帖子,并解释该代码出了什么问题。
  • 我试图使用这篇文章提取路径内的区域:stackoverflow.com/questions/8993292/…
  • 但我不知道在哪里放置此代码,以便在创建路径后,裁剪后的图像将显示在我的屏幕上

标签: android canvas


【解决方案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 以显示裁剪后的图像。正如您提到的硬件加速,我认为您应该看看这个并考虑是否要保持它打开或关闭。 stackoverflow.com/questions/8895677/…
猜你喜欢
  • 2012-11-08
  • 2014-05-19
  • 1970-01-01
  • 2013-06-18
  • 2015-02-02
  • 2015-12-09
  • 1970-01-01
相关资源
最近更新 更多