多边形裁剪图像

8
我想通过多边形区域裁剪图像,但找不到任何库可以实现它。OpenCV对于这个小事情来说太大了。JJIL [进入链接描述] 只能裁剪矩形区域。也许你有任何想法,我该如何实现它?谢谢帮助!

enter image description here enter image description here

对于Nidhi:尝试类似这样的方法,如果不起作用-为路径创建另一个画布,然后从中获取位图(用于蒙版),并将此蒙版位图应用于您的初始画布而不是绘制路径。

Bitmap obmp = BitmapFactory.decodeResource(getResources(), R.drawable.image1);
Bitmap resultImg = Bitmap.createBitmap(obmp.getWidth(), obmp.getHeight(), Bitmap.Config.ARGB_8888);
Bitmap maskImg = Bitmap.createBitmap(obmp.getWidth(), obmp.getHeight(), Bitmap.Config.ARGB_8888);

Canvas mCanvas = new Canvas(resultImg);
Canvas maskCanvas = new Canvas(maskImg);

Paint paint = new Paint(Paint.ANTI_ALIAS_FLAG);
paint.setAntiAlias(true);
paint.setStyle(Paint.Style.FILL);;
paint.setXfermode(new PorterDuffXfermode(Mode.DST_IN));

Path path = new Path();
path.moveTo(view.mx,view.my);
path.lineTo(view.x1,view.y1);
path.lineTo(view.x2,view.y2 );
path.lineTo(view.x3,view.y3);
path.lineTo(view.x4,view.y4);
path.close();

maskCanvas.drawPath(path, paint);   
mCanvas.drawBitmap(obmp, 0, 0, null);
mCanvas.drawBitmap(maskImg, 0, 0, paint);

1
你遇到的问题很简单:首先,在你感兴趣的区域内创建一个掩码,将其内部填充为1;其次,将所有掩码值为0的图像像素替换为某个背景值。 - Eddy_Em
1
你好ADK,感谢你的大力帮助。在上面的代码中进行了一些编辑后,终于完成了裁剪。非常感谢 :) - Dory
嘿ADK,你是如何从最终蒙版图像中裁剪出露出的图像的?因为蒙版后它显示白色背景。 - Dory
嗨Nidhi,你需要带有alpha通道的画布。 - ADK
嘿@ADK,我尝试更改alpha通道,但由于遮罩图像的大小与原始图像相同,因此在裁剪后的图像中显示了透明背景。 - Dory
显示剩余11条评论
2个回答

2

0

这是一个工作中的 Kotlin 示例,它可以将图像剪切成多边形共享,具体取决于路径

  private fun createBitmap() {
    var bitmap = BitmapFactory.decodeResource(resources, R.drawable.gr)
    val mutableBitmap: Bitmap = bitmap.copy(Bitmap.Config.ARGB_8888, true)

    val bitmap2 = Bitmap.createBitmap(400, 400, Bitmap.Config.ARGB_8888)
    val polyCanvas = Canvas(bitmap2)
    val canvas = Canvas(mutableBitmap)
   
    var paint = Paint()
    paint.strokeWidth = 9f
   
    val path = Path()
    path.moveTo(150f, 0f)
    path.lineTo(230f, 120f)
    path.lineTo(290f, 160f)
    path.lineTo(150f, 170f)
    path.lineTo(70f, 200f)
    path.lineTo(150f, 0f)
    polyCanvas.drawPath(path, paint)
    paint.xfermode = PorterDuffXfermode(PorterDuff.Mode.SRC_IN);
    polyCanvas.drawBitmap(mutableBitmap, 0f, 0f, paint)

    imageView.setImageBitmap(bitmap2)

  }

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接