我是新手开发者,我需要你的帮助,这对你来说可能是微不足道的。
我有这种像素格式的图像数据:256色调的RGBA。它来自FFmpeg (PIX_FMT_PAL8)
,它以这种方式解释:
PIX_FMT_RGB32以特定于endian的方式处理。一个RGBA 颜色组合在一起:
(A <&lt; 24)| (R&lt;&lt; 16)| (G <&lt; 8)|乙
在小端CPU架构上存储为BGRA,在big-endian CPU上存储为ARGB。
当像素格式是调色RGB(PIX_FMT_PAL8)时,调色图像数据存储在AVFrame.data [0]中。
调色板在AVFrame.data [1]中传输,长度为1024字节(256个4字节条目),其格式与上述PIX_FMT_RGB32相同(即,它也是字节序特定的)。另请注意,存储在AVFrame.data [1]中的各个RGB调色板组件应在0..255范围内。
AVFrame结构包含uint8_t *data[4]
和int linesize[4]
,它们仅用以下内容描述:
uint8_t *data[4]
=指向图片平面的指针- 给出了四个组成部分,这就是全部。
- 最后一个组件是alpha
int linesize[4]
=每行的字节数
我有AVFrame结构,包含所有需要的数据,但我不知道如何处理它。 我需要从这个图像数据创建一个NSImage。
我该怎么做?
答案 0 :(得分:1)
在调色图像的情况下,像素包含一个字节值,该值是调色板的索引。调色板有256个条目。
像素从地址AVFrame.data [0]开始存储;调色板从地址AVFrame.data [1]开始存储。
因此,要获得(X,Y)像素的4字节像素值,您可以先使用:
uint8_t Index= AVFrame.data[0][X + AVFrame.linesize[0] * Y];
将索引导入调色板,然后
int RGBA= ((int*)AVFrame.data[1])[Index];
获取RGBA编码值。