Frage

Ich entwickle eine iPhone -App, die einige Standard -Kamera -Funktionen enthält. Das Speichern in der Kamerarolle ist wirklich zu langsam. Es erfordert ungefähr vier Sekunden auf iPhone 4. Gibt es eine Möglichkeit, die Geschwindigkeit zu verbessern?

Wenn Sie sich die Standard -iPhone -Kamera -App ansehen, können nachfolgende Fotos ohne große Verzögerungen aufgenommen werden, und Fotos werden ziemlich sofort auf der Festplatte gespeichert (wenn Sie mit dem letzten Foto in der unteren Ecke des Bildschirms auf das kleine Quadrat klicken, die, die, die Die Fotobibliothek öffnet sich immer für das gespeicherte Bild, auch wenn Sie eine große Abfolge von ihnen nehmen).

Hier finden Sie zwei Summplets des bedeutenden Code, mit dem ich das Bild aus dem Puffer abruft und dann das Foto in der Kamerarolle speichern kann. Ich versuchte, vor und nach dem 2. Snipplet einen NSlog zu setzen, und es bestätigte eine Verspätung von 4 Sekunden, um den Speichervorgang abzuschließen.

[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];
         }
     }];
War es hilfreich?

Lösung

Ich bin kein Experte dafür, aber neugierig auf das Thema.

Ich denke, es wird immer eine erhebliche Zeit geben, die zum Speichern eines Bildes benötigt wird. Dies gilt insbesondere dann, wenn Sie zukünftige iPhones unterstützen möchten, die höchstwahrscheinlich größere Bilder erzeugen als heute.

Eine Sache, die meiner Meinung nach die Leistung verbessern kann, ist, wenn Sie verwenden -(void)writeImageDataToSavedPhotosAlbum: ...Anstatt von - (void)writeImageToSavedPhotosAlbum: .... Der JPEG -Extraktions- und Komprimierungsprozess kann dann ignoriert werden. Es ist sehr kostspielig, da es etwa 3 MB Daten in etwa 15 MB verwandelt.

Dies ist reine Spekulation, aber wenn die JPEG -Extraktion/-komprimierung hardware beschleunigt ist, kann die Hardware -Ressource möglicherweise besetzt sein, wenn Sie die Kameraausgabe gleichzeitig anzeigen. Der Prozess muss also von der CPU durchgeführt werden.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top