问题描述
我正在尝试将我从相机获取的 UIImage 添加到 [UIImage],但是当我使用以下代码时,相机会在添加 12 帧后停止
var temp1:CGImage?
extension VideoCapture: AVCaptureVideoDataOutputSampleBufferDelegate {
public func captureOutput(_ output: AVCaptureOutput,didOutput sampleBuffer: CMSampleBuffer,from connection: AVCaptureConnection) {
// print(1)
guard let delegate = self.delegate else { return }
// print(sampleBuffer.imageBuffer)
if let pixelBuffer = sampleBuffer.imageBuffer {
// Attempt to lock the image buffer to gain access to its memory.
guard CVPixelBufferLockBaseAddress(pixelBuffer,.readOnly) == kCVReturnSuccess
else {
return
}
// Create Core Graphics image placeholder.
var image: CGImage?
// Create a Core Graphics bitmap image from the pixel buffer.
VTCreateCGImageFromCVPixelBuffer(pixelBuffer,options: nil,imageOut: &image)
dispatchQueue.main.async {
if image != nil{
self.temp.append(image)
print(self.temp.count)
}
delegate.videoCapture(self,didCaptureFrame: image)
}
//
}
}
解决方法
如果您使用 UIImagePickerController
,则可以使用 UIImagePickerControllerDelegate
进行开发
例如
var temp1:UIImage?
extension VideoCapture: UIImagePickerControllerDelegate,UINavigationControllerDelegate {
func imagePickerController(_ picker: UIImagePickerController,didFinishPickingMediaWithInfo info: [UIImagePickerController.InfoKey : Any]) {
if let image = info[UIImagePickerController.InfoKey(rawValue: "UIImagePickerControllerEditedImage")] as? UIImage {
// modified Image
temp1 = image.convertToGrayScale()
} else if let image = info[UIImagePickerController.InfoKey(rawValue: "UIImagePickerControllerOriginalImage")] as? UIImage {
// original Image
temp1 = image.convertToGrayScale()
}
picker.dismiss(animated: true,completion: nil)
}