1

我从 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,所以应该更大。

我知道我可能会问一个基本问题,但不幸的是我找不到任何关于此的信息或教程。

谢谢

4

1 回答 1

1

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

于 2018-09-26T14:04:12.280 回答