处理在Android上使用ImageReader获得的图像

时间:2018-09-25 15:27:32

标签: android bytebuffer rgba argb image-reader

我正在从ImageReader接收图像,其格式为PixelFormat.RGBA_8888

我想要的是将图像转换为ARGB。

获取缓冲区很简单

private OnImageAvailableListener frameObserver = new OnImageAvailableListener() {
    public void onImageAvailable(ImageReader reader) {
        Image frame = reader.acquireNextImage();
        Image.Plane[] planes = frame.getPlanes();

        ByteBuffer buffer = planes[0].getBuffer();
        byte[] bytes = new byte[buffer.remaining()];
        buffer.get(bytes);

但是结果对我来说并不有意义。它是一个320x240的图像,应该具有320X240X32(RGBA_8888)字节...但是buffer.length只有307200字节。

它还具有striderow 1280和stridePixel 4,因此它应该更大。

我知道我可能会问一个基本问题,但是很遗憾,我无法找到任何有关此方面的信息或教程。

谢谢

1 个答案:

答案 0 :(得分:1)

愚蠢的我,我虽然RGBA_8888每个通道8个字节,但它是8位(一个字节)。因此,每个像素是数组上的4个字节(不是32个)。