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

我正在从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,因此它应该更大。

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

谢谢

最佳答案

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

本文翻译自 https://stackoverflow.com/questions/52501775/

网站遵循 CC BY-SA 4.0 协议,转载或引用请注明出处。

标签 android bytebuffer rgba argb image-reader


相关文章:

android - 带有Gridlayout的Cardview产生意外行为

android - 与服务一起使用时,无法使用SMS管理器

java - 为什么ByteBuffer不保留putDouble和getDouble的索引?

android - 带徽章的BottomAppBar导航图标

android - 如何打开默认浏览器

java - 确定ByteBuffer中的字节数

python - 如何使用Boost :: Python公开原始字节缓冲区?

javascript - 替换\更改RGBA JavaScript中的Alpha

image - 去图像处理

css - 将HEX转换为RGBa