0

为了了解如何使用 MediaCodec,我遵循了这个示例。

这个例子对我来说很好,除了一件事,我不知道在我从缓冲区中抓取帧之后如何确定颜色类型。

这就是我抓取框架(Java)的方式:

        GLES20.glReadPixels(0, 0, mWidth, mHeight, GLES20.GL_RGBA, GLES20.GL_UNSIGNED_BYTE,
            mPixelBuf);
        mPixelBuf.rewind();

        int[] colors = mColorSwapBuf;
        mPixelBuf.asIntBuffer().get(colors);

我的问题是:我怎么知道我有什么颜色?

这是输入示例: color[0] = 0xffd2c8bc

4

1 回答 1

1

这是一个 32 位 RGBA 值。有点。

提取数据时glReadPixels(),它会抓取一个红色字节,然后是一个绿色字节,依此类推。帧抓取代码将其视为小端,所以你得到0xAABBGGRR. 原始中的交换代码交换 B 和 R 通道,留下0xAARRGGBB.

在您的代码示例中,您不进行交换,因此您仍然采用 ABGR 格式。对于您的示例,这意味着 A=0xff,B=0xd2,G=0xc8,R=0xbc。您可以通过交换字节将其转换为单个通道。您也可以使用 byte[] 而不是 int[] 并单独访问每种颜色(buf[0] 到 buf[3] 是像素 0 的红绿蓝阿尔法,buf[4] 到 buf[7] ] 用于像素 1 等)。

于 2013-12-16T16:15:09.197 回答