【发布时间】:2014-06-01 13:12:21
【问题描述】:
在我的应用程序中,我将使用四个 (x,y) 坐标裁剪图像,并且我需要在另一个活动屏幕中显示裁剪的图像。例如,在下图中,我想裁剪白色图层本身。所以任何人都提供了在我的项目中完成这项技术的解决方案。
【问题讨论】:
标签: android android-intent android-imageview
在我的应用程序中,我将使用四个 (x,y) 坐标裁剪图像,并且我需要在另一个活动屏幕中显示裁剪的图像。例如,在下图中,我想裁剪白色图层本身。所以任何人都提供了在我的项目中完成这项技术的解决方案。
【问题讨论】:
标签: android android-intent android-imageview
使用 Bitmap 类的实例,您可以使用 Bitmap.creatBitmap();方法传递原始图像 x y(用于左上角),然后传递宽度和高度。
在你原来的例子中是:
Bitmap newBitmap=Bitmap.createBitmap(oldBitmap,10,20,70,80);
Bitmap 类还允许您访问像素 int 表示颜色的数组。如果您知道要根据每个点的坐标裁剪的形状。您可以遍历数组并将 alpha 设置为完全在您的形状之外的那些。
【讨论】:
我已经在我的一个应用中完成了这样的功能。请查看下面的代码,了解如何裁剪从相机捕获的图像。
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()
}
【讨论】: