将 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。
我使用新的 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。