我正在开发一款包含一些标准“相机”功能的iPhone应用程序。保存到相机胶卷真是太慢了,iPhone 4需要大约四秒钟。有什么方法可以提高速度吗?
如果您查看默认的iPhone相机应用程序,它可以拍摄后续照片而不会出现大的延迟,并且照片会立即保存到磁盘上(如果您点击拍摄最后一张照片的小方块,则会在屏幕,照片库总是在保存的图片上打开,即使你拍摄了大量的照片。)
这是我用来从缓冲区获取图像然后将照片保存在相机胶卷中的重要代码的两个小贴士;我试图在第二个snipplet之前和之后放置一个NSLog,它确认了4秒的延迟来完成保存过程。
[stillImageOutput captureStillImageAsynchronouslyFromConnection:videoConnection completionHandler: ^(CMSampleBufferRef imageSampleBuffer, NSError *error)
{
NSData *imageData = [AVCaptureStillImageOutput jpegStillImageNSDataRepresentation:imageSampleBuffer];
UIImage *image = [[UIImage alloc] initWithData:imageData];
...
ALAssetsLibrary *library = [[[ALAssetsLibrary alloc] init] autorelease];
NSLog(@"SCATTO: Inizio salvataggio in library...");
[library writeImageToSavedPhotosAlbum:[image CGImage] metadata:exifAttachments_dictionary completionBlock:^(NSURL *newURL, NSError *error) {
if (error){
NSLog(@"SCATTO: Salvataggio in library: ERRORE");
} else {
NSLog(@"SCATTO: Salvataggio in library: OK");
[self loadNewestPhoto];
}
}];
答案 0 :(得分:9)
我不是这方面的专家,但我很好奇这个话题。
我认为保存图像总是需要大量时间。如果您希望支持将来可能会创建比现在更大的图像的未来iPhone,尤其如此。
我认为可以提高性能的一件事是使用-(void)writeImageDataToSavedPhotosAlbum: ...
而不是- (void)writeImageToSavedPhotosAlbum: ...
。然后可以忽略JPEG提取和压缩过程。由于它将大约3MB的数据转换为大约15MB,因此成本非常高。
这是纯粹的推测,但如果JPEG提取/压缩是硬件加速的,则如果同时显示摄像机输出,则可能会占用硬件资源。因此,该过程必须由CPU完成。