将depthMap缓冲区写入文件快速

问题描述

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

我想将获得的CVPixelBuffer转储到.bin文件中。

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

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

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

如何将这些值保存到iPad上的文件中?感谢您的帮助。

解决方法

我自己解决了。如果有人需要,这是我的解决方案。

收集所有必要的值:

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

然后我将bufferaddress交给Data obj,以在内存中创建一个字节缓冲区-> 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。