将 depthMap 缓冲区写入文件 (Swift)

Write depthMap buffer to file (Swift)

我使用新的 iPadPro 和 LIDAR 应用程序,并且对 SWIFT5 有点陌生(通常在 CordovaApps 上工作,需要最少的本机编码)

我想将我为一帧获得的 CVPixelBuffer 转储到 .bin 文件。

我得到这样的缓冲区:let depthMap = frame.sceneDepth!.depthMap 它 returns 一个 DepthFloat32 缓冲区。

之后我锁定地址并获取它:

CVPixelBufferLockBaseAddress(depthMap, CVPixelBufferLockFlags(rawValue: 0))
var addr = CVPixelBufferGetBaseAddress(depthMap)

如何将这些值保存到 iPad 上的文件中?如有任何帮助,我们将不胜感激。

我自己解决了。这是我的解决方案,以防有人需要它。

收集所有必要的值:

let addr = CVPixelBufferGetBaseAddress(depthMap)
let height = CVPixelBufferGetHeight(depthMap)
let bpr = CVPixelBufferGetBytesPerRow(depthMap)

然后我将缓冲区地址交给数据对象以在内存中创建一个字节缓冲区 --> Data

let data = Data(bytes: addr!, count: (bpr*height))
do {
   let filename = getDirectory().appendingPathComponent(timestamp +"_depthbuffer.bin")
   try data.write(to: filename)
} catch {
   // do smth with errors
}

getDirectory() 是用于查找文档目录的自定义函数。我可以从应用程序容器中获取创建的文件。

不要忘记锁定和解锁 BufferAdress。