Android 如何使用四(x,y)坐标裁剪图像
在我的应用程序中,我将使用四个(x,y)坐标裁剪图像,并且我还需要在另一个活动屏幕中显示裁剪后的图像。例如,在下图中,我想裁剪白色层本身。因此,任何人都可以在我的项目中提供解决方案来完成这项技术Android 如何使用四(x,y)坐标裁剪图像,android,android-intent,android-imageview,Android,Android Intent,Android Imageview,在我的应用程序中,我将使用四个(x,y)坐标裁剪图像,并且我还需要在另一个活动屏幕中显示裁剪后的图像。例如,在下图中,我想裁剪白色层本身。因此,任何人都可以在我的项目中提供解决方案来完成这项技术 使用Bitmap类的实例,可以使用Bitmap.createBitmap();方法传递原始图像x y(左上角),然后传递宽度和高度 在您最初的示例中,它将是: Bitmap newBitmap=Bitmap.createBitmap(oldBitmap,10,20,70,80); 编辑 位图类还允
使用Bitmap类的实例,可以使用Bitmap.createBitmap();方法传递原始图像x y(左上角),然后传递宽度和高度 在您最初的示例中,它将是:
Bitmap newBitmap=Bitmap.createBitmap(oldBitmap,10,20,70,80);
编辑
位图类还允许您访问表示颜色的像素int数组。如果您知道要根据每个点的坐标裁剪的形状。你可以在数组中迭代,并在形状之外的数组中将alpha设置为full。我已经在我的一个应用程序中完成了这样的功能。请检查下面的代码,了解如何从相机中裁剪捕获的图像
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()
}
@Ellipsia,你的代码只对矩形大小的裁剪有用,但实际上我需要的是使用四个坐标裁剪图像,形状不仅仅是矩形,它根据四个点(四边形)而变化。所以你想要一个菱形的裁剪?请参见编辑。