我正在从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,因此它应该更大。
我知道我可能会问一个基本问题,但是很遗憾,我无法找到任何有关此方面的信息或教程。
谢谢
答案 0 :(得分:1)
愚蠢的我,我虽然RGBA_8888每个通道8个字节,但它是8位(一个字节)。因此,每个像素是数组上的4个字节(不是32个)。