如何从相机迭代 YUV NV12 缓冲区中的像素并在 Obj-c 中设置颜色?



我需要遍历 YUV NV12 缓冲区的像素并设置颜色。我认为 NV12 格式的转换应该很容易,但我无法弄清楚。如果我可以将顶部 50x50 像素设置为 0,0 为白色,我就会被设置。提前谢谢你。

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

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

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

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

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

最新更新