Domanda

Sto sviluppando un'applicazione per iPhone che include alcune funzioni standard "Camera". Salvataggio in rullino fotografico è davvero troppo lento, richiede circa quattro secondi su iPhone 4. C'è qualche modo per migliorare la velocità?

Se si guarda l'app Fotocamera di default iPhone, si può prendere le foto successive, senza grandi ritardi, e le foto sono salvate abbastanza istantaneamente su disco (se si fa clic sulla piccola piazza con l'ultima foto scattata, nell'angolo in basso della schermo, la libreria di foto si apre sempre l'immagine salvata, anche se si prende una grande sequenza di loro).

Ecco due snipplets l'uso significativo codice che ho per ottenere l'immagine dal buffer e quindi per salvare la foto nel rullino fotografico; Ho provato a mettere un NSLog prima e dopo il 2 ° snipplet, e ha confermato un 4 secondi di ritardo per completare il processo il salvataggio.

[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];
         }
     }];
È stato utile?

Soluzione

Io non sono un esperto in questo, ma sono curioso sull'argomento.

Penso che ci sarà sempre una notevole quantità di tempo necessario per salvare un'immagine. Ciò è particolarmente vero se si desidera supporto iPhone futuro che molto probabilmente creare immagini più grandi di oggi.

Una cosa che penso possa migliorare le prestazioni è se si utilizza -(void)writeImageDataToSavedPhotosAlbum: ... invece di - (void)writeImageToSavedPhotosAlbum: .... Il processo di estrazione e la compressione JPEG può essere ignorato poi. È molto costoso in quanto trasforma circa 3 MB di dati a circa 15 MB.

Questa è pura speculazione, ma se il JPEG di estrazione / compressione è accelerata hardware, la risorsa hardware può essere occupata se si visualizza l'uscita della telecamera, allo stesso tempo. Così il processo deve essere fatto dalla CPU.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top