Ios 将一系列捕获的图像存储到阵列中
在下面的函数(didPressTakePhoto)中,我尝试拍摄一系列图片(本例中为10张),将它们存储到一个数组中,并将它们作为动画显示在“gif”中。然而,这个程序一直在崩溃,我不知道为什么。这都是在单击一个按钮后完成的,因此函数名为。此外,我还尝试将动画代码置于for循环之外,但imageArray会因为某种原因失去其值Ios 将一系列捕获的图像存储到阵列中,ios,swift,Ios,Swift,在下面的函数(didPressTakePhoto)中,我尝试拍摄一系列图片(本例中为10张),将它们存储到一个数组中,并将它们作为动画显示在“gif”中。然而,这个程序一直在崩溃,我不知道为什么。这都是在单击一个按钮后完成的,因此函数名为。此外,我还尝试将动画代码置于for循环之外,但imageArray会因为某种原因失去其值 func didPressTakePhoto(){ if let videoConnection = stillImageOutput?.connectionW
func didPressTakePhoto(){
if let videoConnection = stillImageOutput?.connectionWithMediaType(AVMediaTypeVideo){
videoConnection.videoOrientation = AVCaptureVideoOrientation.Portrait
stillImageOutput?.captureStillImageAsynchronouslyFromConnection(videoConnection, completionHandler: {
(sampleBuffer, error) in
//var counter = 0
if sampleBuffer != nil {
for var index = 0; index < 10; ++index {
let imageData = AVCaptureStillImageOutput.jpegStillImageNSDataRepresentation(sampleBuffer)
let dataProvider = CGDataProviderCreateWithCFData(imageData)
let cgImageRef = CGImageCreateWithJPEGDataProvider(dataProvider, nil, true, CGColorRenderingIntent.RenderingIntentDefault)
var imageArray: [UIImage] = []
let image = UIImage(CGImage: cgImageRef!, scale: 1.0, orientation: UIImageOrientation.Right)
imageArray.append(image)
imageArray.insert(image, atIndex: index++)
self.tempImageView.image = image
self.tempImageView.hidden = false
//UIImageWriteToSavedPhotosAlbum(image, nil, nil, nil)
var gif: UIImageView!
gif.animationImages = imageArray
gif.animationRepeatCount = -1
gif.animationDuration = 1
gif.startAnimating()
}
}
})
}
}
func didPressTakePhoto(){
如果let videoConnection=stillImageOutput?.connectionWithMediaType(AVMediaTypeVideo){
videoConnection.videoOrientation=AVCaptureVideoOrientation.Portrait
stillImageOutput?.CaptureSillImageAsynchronousLyfromConnection(视频连接,completionHandler:{
(采样缓冲区,错误)在
//变量计数器=0
如果sampleBuffer!=nil{
对于var指数=0;指数<10;++指数{
让imageData=AVCaptureSillImageOutput.jpegStillImageNSDataRepresentation(sampleBuffer)
让dataProvider=CGDataProviderCreateWithCFData(imageData)
让cgImageRef=CGImageCreateWithJPEGDataProvider(dataProvider,nil,true,CGColorRenderingIntent.RenderingIntentDefault)
var imageArray:[UIImage]=[]
让image=UIImage(CGImage:cgImageRef!,比例:1.0,方向:UIImageOrientation.Right)
imageArray.append(图像)
insert(image,atIndex:index++)
self.tempImageView.image=图像
self.tempmageview.hidden=false
//UIImageWriteToSavedPhotosAlbum(图像,无,无,无)
var gif:UIImageView!
gif.animationImages=imageArray
gif.animationRepeatCount=-1
gif.animationDuration=1
gif.startAnimating()
}
}
})
}
}
切勿尝试创建图像数组(即,您正在创建的[UIImage]
)。UIImage非常大,因此许多映像的数组非常大,您将耗尽内存并崩溃
- 将图像保存到磁盘,只保留对它们的引用(即它们名称的数组)
- 在界面中使用图像之前,请将图像缩小到该界面所需的实际物理大小。将全尺寸图像仅用于屏幕大小(或更小)的显示器是一种巨大的能源浪费。您可以使用ImageIO框架从磁盘获取图像的“缩略图”小版本,而不会浪费内存