如何将256色调色板RGBA图像数据转换为NSImage

4
我是一名新手开发者,对于您而言可能微不足道,但我需要您的帮助。
我有一个像素格式为256色调色板RGBA的图像数据。它来自FFmpeg(PIX_FMT_PAL8),并且是这样解释的:
PIX_FMT_RGB32以端特定方式处理。RGBA颜色按以下方式组合: (A << 24) | (R << 16) | (G << 8) | B 在小端CPU架构上以BGRA形式存储,在大端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。
我该如何做?
1个回答

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编码值。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接