0

我尝试在 Accelerate 框架中使用 vImage 缓冲区进行一些直方图计算,并将相机图像作为从 CVpixelbuffer 转换而来的 UIimage 提供。算法正常工作,但屏幕上处理的相机图像数据非常慢。我在 Apple 文档中阅读了一些关于在任务完成时释放缓冲区的信息。抓取缓冲区数据后,我写了两行代码。然而,什么都没有改变。请参阅缓冲区数据释放后的附加屏幕截图。SourceBuffer 和 histogramSourceBuffer 似乎未释放。我不知道如何在调试器中看到空闲缓冲区,但我的缓冲区显示有高度、宽度和数据信息。任何建议如何释放缓冲区以及如何确保它被释放。非常感谢

  if let finalImage =  try? sourceBuffer.createCGImage(format: format) {
            sourceBuffer.free()
            histogramSourceBuffer.free()
            return UIImage(cgImage: finalImage)

在此处输入图像描述

4

1 回答 1

1

您需要在 vImage_Buffer.data 指针上调用 free() 以释放内存。结构本身是不同的分配。

直方图本身是一个指向 vImagePixelCounts 数组的指针数组。这应该根据您分配 vImagePixelCounts 数组的方式释放。vImage 不参与那部分,所以它在你和你之间。

于 2020-07-16T00:58:57.430 回答