使用libav将256个托盘化位图编码为h264

时间:2014-02-12 06:36:42

标签: ffmpeg libavcodec

我将32 bpp位图转换为带有256色托盘的8bpp,这个图像我想用h264进行编码并通过套接字发送。另一方面解码帧并将其显示在我的UI上。

从编码器,侧面:

  1. 捕获32 bpp图像。
  2. 使用256色托盘将图像量化为8bpp。
  3. 将图像从PIX_FMT_GRAY8 Sws_scale到YUV420P。
  4. 使用h264对其进行编码并通过套接字发送。
  5. 从解码器,侧面。

    1. 接收图片。
    2. 解码图片。
    3. 从YUV420P到PIX_FMT_GRAY8的Sws_scale
    4. 并在UI上显示调色板信息(从套接字上的编码器发送)。
    5. 按照上述步骤操作后,我会得到完全失真的图像。当我不使用调色板时,我会得到一张黑白图像。

      我不清楚如何使用h264对8bpp 256调色板位图进行编码并相应地对其进行解码。请帮我解决这个问题。

      在Windows平台上使用C ++。

      提前致谢, 保罗。

1 个答案:

答案 0 :(得分:0)

h.264(默认情况下)不是无损编解码器。所以你不会得到你逐个像素的确切颜色。在YUV中,Y平面是亮度(黑色和白色),UV平面是色度。所以你的紫外线飞机在这里是空的。 Y平面以有损方式压缩。所以你可能有一个看起来像0 =黑色1 =红色2 =绿色... 255 =白色的托盘。你输入了2个像素。在压缩期间,为了消除图像中的复杂性以减小文件大小,2可能变为1.在黑白图像中,您将不会注意到差异。但是当您应用托盘时,绿色像素才会变为红色。

您需要使用无损编解码器,或将256色图像编码为YUV彩色图像。然后,通过查找最接近的颜色或每个解码的像素,后解码将颜色重新调整回您想要的托盘。