如何使用四个(x,y)坐标裁剪图像

时间:2014-04-17 10:05:39

标签: android android-intent android-imageview

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

Example image

2 个答案:

答案 0 :(得分:5)

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

see documentation here.

原始示例中的

将是:

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

修改

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

答案 1 :(得分:0)

我已经在我的一个应用程序中完成了此类功能。请检查以下代码,了解如何从相机中裁剪捕获的图像。

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()
}