使用裁剪矩形将android.media.Image转换为位图

时间:2019-09-16 12:50:28

标签: java android image image-processing

有一些与此类似的问题,但它们不涉及裁剪图像。让我解释。有此方法可将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无法处理裁剪矩形,因此是否有任何最佳方法的想法?

预先感谢

0 个答案:

没有答案