【问题标题】:Crop image by polygon area按多边形区域裁剪图像
【发布时间】:2013-04-04 20:14:11
【问题描述】:

我想按多边形区域裁剪图像,但找不到任何可以制作的库。 OpenCV 对于这个小东西来说太大了。 JJIL [enter link description here] 只裁剪矩形区域。 也许你有什么想法我怎么能实现它?感谢您的帮助!

对于尼迪: 尝试这样的事情,如果不起作用 - 为路径创建另一个画布,然后从中获取位图(用于遮罩),然后将此遮罩位图应用于您的初始画布而不是 drawPath。

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);

【问题讨论】:

  • 你有什么问题?这很简单:首先 - 用您感兴趣的区域内的蒙版填充,其次 - 用某个背景值替换所有 mask==0 的图像像素。
  • 感谢您的建议!
  • 你好 ADK,实际上我是 android 的新手。我也在寻找如何使用多边形裁剪图像的解决方案。你能给我一些关于你是如何做到这一点的提示吗?一些提示也会对我有很大帮助。
  • 嗨! stackoverflow.com/questions/12614542/maskingcrop-image-in-frame 不够?你能给我提供更多细节吗?也许你给我看你的代码?
  • 您好 ADK,感谢您的大力帮助。终于在上面的代码中完成了一些编辑。非常感谢:)

标签: android image image-processing crop


【解决方案1】:

感谢 Eddy_Em,我通过使用 PorterDuffXfermode 实现了这一点。 Good example

【讨论】:

    【解决方案2】:

    这是一个有效的 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)
    
      }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-11-10
      • 1970-01-01
      • 2023-03-20
      • 1970-01-01
      • 1970-01-01
      • 2014-08-03
      • 1970-01-01
      相关资源
      最近更新 更多