【问题标题】:How to crop the image using four (x,y) coordinates如何使用四个 (x,y) 坐标裁剪图像
【发布时间】:2014-06-01 13:12:21
【问题描述】:

在我的应用程序中,我将使用四个 (x,y) 坐标裁剪图像,并且我需要在另一个活动屏幕中显示裁剪的图像。例如,在下图中,我想裁剪白色图层本身。所以任何人都提供了在我的项目中完成这项技术的解决方案。

【问题讨论】:

    标签: android android-intent android-imageview


    【解决方案1】:

    使用 Bitmap 类的实例,您可以使用 Bitmap.creatBitmap();方法传递原始图像 x y(用于左上角),然后传递宽度和高度。

    see documentation here.

    在你原来的例子中是:

    Bitmap newBitmap=Bitmap.createBitmap(oldBitmap,10,20,70,80);
    

    编辑

    Bitmap 类还允许您访问像素 int 表示颜色的数组。如果您知道要根据每个点的坐标裁剪的形状。您可以遍历数组并将 alpha 设置为完全在您的形状之外的那些。

    【讨论】:

    • @theellipsis,您的代码仅对矩形大小的裁剪有用,但实际上我需要的是使用四个坐标裁剪图像,形状不仅适用于矩形,它会根据四个点而变化(四边形)。
    • 例如,您会想要菱形作物吗?见编辑。
    【解决方案2】:

    我已经在我的一个应用中完成了这样的功能。请查看下面的代码,了解如何裁剪从相机捕获的图像。

    val bytes = cropImage(capturedBitmap!!, viewBinding.viewFinder, viewBinding.containerOverly)
    
    val croppedImage = BitmapFactory.decodeByteArray(bytes, 0, bytes.size)
    
    private fun cropImage(bitmap: Bitmap, containerImage: View, containerOverlay: View): ByteArray {
        val heightOriginal = containerImage.height
        val widthOriginal = containerImage.width
        val heightFrame = containerOverlay.height
        val widthFrame = containerOverlay.width
        val leftFrame = containerOverlay.left
        val topFrame = containerOverlay.top
        val heightReal = bitmap.height
        val widthReal = bitmap.width
        val widthFinal = widthFrame * widthReal / widthOriginal
        val heightFinal = heightFrame * heightReal / heightOriginal
        val leftFinal = leftFrame * widthReal / widthOriginal
        val topFinal = topFrame * heightReal / heightOriginal
        val bitmapFinal = Bitmap.createBitmap(
            bitmap,
            leftFinal, topFinal, widthFinal, heightFinal
        )
        val stream = ByteArrayOutputStream()
        bitmapFinal.compress(
            Bitmap.CompressFormat.JPEG,
            100,
            stream
        ) //100 is the best quality possibe
        return stream.toByteArray()
    }
    

    【讨论】:

      猜你喜欢
      • 2020-06-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-07-19
      • 2014-06-29
      • 2016-12-09
      • 1970-01-01
      相关资源
      最近更新 更多