[英]UIImage to CVPixelBuffer memory issue
我有一個swift函數,它接受一個UIImage並返回一個CVPixelBuffer。 多次運行此功能時,內存不斷增長,導致崩潰。
我已經想到了什么:
這是我的代碼。 任何幫助都表示贊賞,因為我真的很喜歡這個。
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
}
我發現問題不是pixelbuffer,而是圖像引用。
當我在上下文中繪制圖像時,很多圖像像素數據都存儲在image.cgimage
對象中,看起來(這只是我的觀點基於此處的行為)。 所以我通過釋放我對每次調用此函數后繪制的圖像的引用來解決,並且內存對於所有進程保持穩定。
您需要刪除您創建的引用,否則像素緩沖區將保持不變,然后在每次調用時創建一個新的引用。 將ref放入像素緩沖區會將其放回池中,以便在下次調用時使用它。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.