2

標準的な「カメラ」機能を含む iPhone アプリを開発しています。カメラロールへの保存は本当に遅すぎます。iPhone 4 では約 4 秒かかります。速度を改善する方法はありますか?

デフォルトの iPhone カメラ アプリを見ると、大きな遅延なく後続の写真を撮影でき、写真はすぐにディスクに保存されます (画面の下隅にある、最後に撮影した写真の小さな四角形をクリックすると、フォト ライブラリは、大量の連続写真を撮った場合でも、常に保存された写真で開きます)。

バッファから画像を取得し、写真をカメラ ロールに保存するために使用する重要なコードの 2 つのスニペットを次に示します。2 番目のスニペットの前後に 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 に答える