android 按多边形区域裁剪图像

ru9i0ody  于 2023-06-20  发布在  Android
关注(0)|答案(3)|浏览(262)

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

对于Nidhi:尝试这样的东西,如果不工作-创建另一个画布的路径,然后从它得到位图(掩码),并应用此掩码位图到您的初始画布,而不是drawPath。

  1. Bitmap obmp = BitmapFactory.decodeResource(getResources(), R.drawable.image1);
  2. Bitmap resultImg = Bitmap.createBitmap(obmp.getWidth(), obmp.getHeight(), Bitmap.Config.ARGB_8888);
  3. Bitmap maskImg = Bitmap.createBitmap(obmp.getWidth(), obmp.getHeight(), Bitmap.Config.ARGB_8888);
  4. Canvas mCanvas = new Canvas(resultImg);
  5. Canvas maskCanvas = new Canvas(maskImg);
  6. Paint paint = new Paint(Paint.ANTI_ALIAS_FLAG);
  7. paint.setAntiAlias(true);
  8. paint.setStyle(Paint.Style.FILL);;
  9. paint.setXfermode(new PorterDuffXfermode(Mode.DST_IN));
  10. Path path = new Path();
  11. path.moveTo(view.mx,view.my);
  12. path.lineTo(view.x1,view.y1);
  13. path.lineTo(view.x2,view.y2 );
  14. path.lineTo(view.x3,view.y3);
  15. path.lineTo(view.x4,view.y4);
  16. path.close();
  17. maskCanvas.drawPath(path, paint);
  18. mCanvas.drawBitmap(obmp, 0, 0, null);
  19. mCanvas.drawBitmap(maskImg, 0, 0, paint);
monwx1rj

monwx1rj1#

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

gg0vcinb

gg0vcinb2#

这是一个可以工作的Kotlin示例,它根据路径将图像和片段共享到多边形

  1. private fun createBitmap() {
  2. var bitmap = BitmapFactory.decodeResource(resources, R.drawable.gr)
  3. val mutableBitmap: Bitmap = bitmap.copy(Bitmap.Config.ARGB_8888, true)
  4. val bitmap2 = Bitmap.createBitmap(400, 400, Bitmap.Config.ARGB_8888)
  5. val polyCanvas = Canvas(bitmap2)
  6. val canvas = Canvas(mutableBitmap)
  7. var paint = Paint()
  8. paint.strokeWidth = 9f
  9. val path = Path()
  10. path.moveTo(150f, 0f)
  11. path.lineTo(230f, 120f)
  12. path.lineTo(290f, 160f)
  13. path.lineTo(150f, 170f)
  14. path.lineTo(70f, 200f)
  15. path.lineTo(150f, 0f)
  16. polyCanvas.drawPath(path, paint)
  17. paint.xfermode = PorterDuffXfermode(PorterDuff.Mode.SRC_IN);
  18. polyCanvas.drawBitmap(mutableBitmap, 0f, 0f, paint)
  19. imageView.setImageBitmap(bitmap2)
  20. }
展开查看全部
c7rzv4ha

c7rzv4ha3#

这是一个很晚的答案,但它将对许多人有帮助。
解决方案在这里:https://github.com/pqpo/SmartCropper/tree/master
你需要的一切都在那里。

相关问题