有一些与此类似的问题,但它们不涉及裁剪图像。让我解释。有此方法可将android.media.Image转换为位图:
private Bitmap imageToBitmap(Image image) {
ByteBuffer yBuffer = image.getPlanes()[0].getBuffer();
ByteBuffer uBuffer = image.getPlanes()[1].getBuffer();
ByteBuffer vBuffer = image.getPlanes()[2].getBuffer();
int ySize = yBuffer.remaining();
int uSize = uBuffer.remaining();
int vSize = vBuffer.remaining();
byte[] nv21 = new byte[ySize + uSize + vSize];
yBuffer.get(nv21, 0, ySize);
vBuffer.get(nv21, ySize, vSize);
uBuffer.get(nv21, ySize + vSize, uSize);
YuvImage yuvImage = new YuvImage(nv21, ImageFormat.NV21, image.getWidth(), image.getHeight(), null);
ByteArrayOutputStream outputStream = new ByteArrayOutputStream();
yuvImage.compressToJpeg(new Rect(0, 0, yuvImage.getWidth(), yuvImage.getHeight()), 50, outputStream);
byte[] imageBytes = outputStream.toByteArray();
return BitmapFactory.decodeByteArray(imageBytes, 0, imageBytes.length);
}
是从我在某处看到的Kotlin示例中,我将其翻译成Java。
如果图像没有被裁剪,效果很好,但是只要使用Image.setCropRect这样添加cropRectangle:
image.setCropRect(imageCropRect);
Bitmap bitmap = imageToBitmap(Image image)
然后,您获得的位图将像是混合平面或具有许多绿色区域和偏斜的东西。我认为问题在于imageToBitmap无法处理裁剪矩形,因此是否有任何最佳方法的想法?
预先感谢