1 遇到一张png图片的pix_fmt是pal8,好奇pal8是个什么格式,是否支持alpha通道。
2 8 bit 表示 PIX_FMT_RGB32 palette(调色板)
pal8转为rgba代码
uint32_t *pal82RGB(AVFrame *pict, int width, int height)
{
int size = width * height *4;
uint32_t colours[256];
uint32_t *buff = NULL;
buff = (uint32_t*)malloc(size);
if (buff == NULL) {
return NULL;
}
for (int i = 0; i < 256; i++) {
int idx = i * 4;
uint8_t r = pict->data[1][idx];
uint8_t g = pict->data[1][idx + 1];
uint8_t b = pict->data[1][idx + 2];
uint8_t b = pict->data[1][idx + 3];
colours[i] = (b << 24) | (g << 16) | (r << 8) | a; //取调色板
}
//通过data[0]的值,恢复像素数据
for (int y = 0; y < rect->h; ++y) {
for (int x = 0; x < rect->w; ++x) {
int coordinate = x + y * pict->linesize[0];
/*32bpp color table*/
int idx = pcit->data[0][coordinate];
buff[x + (y * rect->w)] = colours[idx];
}
}
return buff;
}
3 总结一下
调色板存放在data[1], 数据存放在data[0]
调色板用255个值表示32bit的颜色范围,编码的时候定好。