如何正确处理CVPixelBuffer中的像素?

时间:2016-03-27 15:29:03

标签: ios cvpixelbuffer cmsamplebuffer

简短的问题是:解决CVPixelBuffer中像素值的公式是什么?

我正在尝试在平面字节数组中转换CVPixelBuffer并注意到一些奇怪的事情:CVPixelBuffer是从CMSampleBuffer获得的。它的宽度和高度为852x640像素。总和545280像素,这需要2181120个字节,每个像素考虑4个字节。

现在第一个奇怪的是,相同的CVPixelBuffer每行返回3456个字节,这对864像素来说足够了。这些额外的12像素来自哪里?如果最终图片中的一行只有852像素宽,但864行中实际有CVPixelBuffer像素,我如何知道哪些字节需要复制?或者哪些字节未使用?顺便问一下,他们没用吗?

另一件事是报告的数据大小CVPixelBuffers,即2211848个字节。现在,如果我们将每行的3456字节与640行相乘,我们最终会得到2211840个字节。所以,我们再留下8个额外字节。那些8字节的问题是什么?他们没用吗?他们到底了吗?

任何有关此问题的建议都值得欢迎, 谢谢。

1 个答案:

答案 0 :(得分:2)

在内部,您的CMSampleBuffer将每行填充为16个字节的倍数,以便它可以使用处理器的内部128位宽寄存器有效地吊起数据。这是我的猜测。如果使用其rowbytes参数和(x,y)在(0,0)到(851,639)范围内访问像素数据,则永远不会有问题。