2

我正在开发一个包含一些标准“相机”功能的 iPhone 应用程序。保存到相机胶卷真的太慢了​​,在 iPhone 4 上大约需要四秒钟。有什么方法可以提高速度吗?

如果您查看默认的 iPhone 相机应用程序,它可以毫无延迟地拍摄后续照片,并且照片会立即保存到磁盘(如果您单击最后一张照片的小方块,在屏幕的下角,照片库总是在保存的照片上打开,即使你拍了很多照片)。

这是我用来从缓冲区获取图像然后将照片保存在相机胶卷中的重要代码的两个片段;我尝试在第二个片段之前和之后放置一个 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];
         }
     }];
4

1 回答 1

9

我不是这方面的专家,但对这个话题很好奇。

我认为保存图像总是需要大量时间。如果您希望支持未来的 iPhone,这很可能会创建比现在更大的图像,则尤其如此。

我认为可能会提高性能的一件事是,如果您使用-(void)writeImageDataToSavedPhotosAlbum: ... 而不是- (void)writeImageToSavedPhotosAlbum: .... JPEG 提取和压缩过程可以忽略。这是非常昂贵的,因为它将大约 3MB 的数据转换为大约 15MB。

这纯属推测,但如果JPEG提取/压缩是硬件加速的,如果同时显示相机输出,可能会占用硬件资源。所以这个过程必须由CPU来完成。

于 2011-09-04T15:53:52.313 回答