0

我需要遍历 YUV NV12 缓冲区的像素并设置颜色。我认为 NV12 格式的转换应该很容易,但我想不通。如果我可以将 0,0 的顶部 50x50 像素设置为白色,我会被设置。先感谢您。

4

1 回答 1

1

您是否尝试过将前 3 个字节(12 位)* 像素数设置为全 0x00 或全 0xFF?
由于您似乎并不关心转换,因此只需覆盖缓冲区就足够了。如果可行,您可以解决其他问题,例如找到正确的颜色并生成矩形而不是线条。

首先,您需要了解 YUV 编码。https://wiki.videolan.org/YUV#NV12。根据本文档,您很可能需要覆盖 Y 范围和 UV 范围中的位。所以写在两个不同的地方。这与所有像素颜色都具有密切局部性的 RGB 缓冲区完全相反。因此,您可以开始并覆盖 Y 范围内的前 8 位以及 UV 范围内的前 2 位或后 2 位。那应该将一个像素设置为与以前不同的颜色。

最后,您可以处理 50x50 矩形的显示。您需要知道图像尺寸,因为您需要在每一行之后进行偏移(如果缓冲区是按行传输的!)。例如,这张图:

.------.
|xx    |
|xx    |
|      |
'------'

在具有行主要传输值的 rgb 颜色空间中,缓冲区将如下所示xx0000xx0000000000:因此,您需要覆盖字节 0-6 和字节 18-24 (RGB)。因为:第一个范围 * 3 字节 RGB。然后下一个范围从行号 (1) * 图像宽度 (6) * 3 字节 (RGB) 开始,依此类推。您必须将相同的想法应用于 YUV 颜色空间。

于 2020-05-16T07:56:07.763 回答