我有一個swift函數,它需要一個UIImage並返回一個CVPixelBuffer。當多次運行此功能時,內存不斷增長,導致崩潰。UIImage CVPixelBuffer內存問題
我已經想通了:
- 隨着儀器在我的代碼image.draw線隔離的存儲問題。它顯示了很多CGImage數據保存在內存中的時間。
- 我孤立了這個函數,所以我確定這個問題不是在它之外發生的事情(在調用者中),因爲我從那裏刪除了所有的代碼,並且內存不斷增長。
- 我試着調用這個方法的調用,有些延遲,給系統釋放時間,但它不工作
- 我試着在autoreleasepool中包裝了多個部分的代碼,仍然無法工作。
- 我試圖在主線程上,在utility.qos線程等,沒有什麼變化
- 我讀了StackOverflow的其他問題,但看起來像其他人的解決方案不工作在我的情況。
這是我的代碼。任何幫助表示讚賞,因爲我真的在這一塊上敲了敲頭。
fileprivate func CreatePixelBufferFromImage(_ image: UIImage) -> CVPixelBuffer?{
let size = image.size;
var pxbuffer : CVPixelBuffer?
let status = CVPixelBufferPoolCreatePixelBuffer(kCFAllocatorDefault, self.exportingAdaptor!.pixelBufferPool!, &pxbuffer)
guard (status == kCVReturnSuccess) else{
return nil
}
CVPixelBufferLockBaseAddress(pxbuffer!, CVPixelBufferLockFlags(rawValue: 0));
let pxdata = CVPixelBufferGetBaseAddress(pxbuffer!);
let rgbColorSpace = CGColorSpaceCreateDeviceRGB();
let context = CGContext(data: pxdata, width: Int(size.width),
height: Int(size.height), bitsPerComponent: 8, bytesPerRow: CVPixelBufferGetBytesPerRow(pxbuffer!), space: rgbColorSpace,
bitmapInfo: CGImageAlphaInfo.premultipliedFirst.rawValue);
context?.translateBy(x: 0, y: image.size.height);
context?.scaleBy(x: 1.0, y: -1.0);
UIGraphicsPushContext(context!)
image.draw(in: CGRect(x: 0, y: 0, width: size.width, height: size.height));
//
UIGraphicsPopContext()
CVPixelBufferUnlockBaseAddress(pxbuffer!, CVPixelBufferLockFlags(rawValue: 0));
return pxbuffer
}
請將您的答案標記爲已接受 –