質問

標準の「カメラ」機能を含むiPhoneアプリを開発しています。カメラロールへの保存は非常に遅すぎます。iPhone4で約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];
         }
     }];
役に立ちましたか?

解決

私はこれの専門家ではありませんが、このトピックに興味があります。

画像を保存するのに必要な時間が常にあると思います。これは、今日よりも大きな画像を作成する可能性が最も高い将来のiPhoneをサポートしたい場合に特に当てはまります。

パフォーマンスを改善するかもしれないと思うことの1つは、使用する場合です -(void)writeImageDataToSavedPhotosAlbum: ...それ以外の - (void)writeImageToSavedPhotosAlbum: .... 。その後、JPEG抽出および圧縮プロセスを無視できます。約3MBのデータを約15MBに変換するため、非常に費用がかかります。

これは純粋な推測ですが、JPEG抽出/圧縮がハードウェアが加速される場合、カメラの出力を同時に表示するとハードウェアリソースが占める可能性があります。したがって、プロセスはCPUによって行わなければなりません。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top