writeImageToSavedPhotosAlbum слишком медленно? - PullRequest
2 голосов
/ 04 сентября 2011

Я разрабатываю приложение для iPhone, которое включает в себя некоторые стандартные функции «камеры».Сохранение в рулон камеры действительно СЛИШКОМ медленно, на iPhone 4 это занимает около четырех секунд. Есть ли способ повысить скорость?

Если вы посмотрите на стандартное приложение iPhone для камеры iPhone, оно может делать последующие фотографии без больших задержеки фотографии сохраняются довольно быстро на диск (если щелкнуть небольшой квадрат с последней сделанной фотографией в нижнем углу экрана, библиотека фотографий всегда открывается на сохраненном снимке, даже если вы делаете большую их последовательность).

Вот два фрагмента значимого кода, который я использую, чтобы получить изображение из буфера, а затем сохранить фотографию в кадре с камерой;Я попытался поместить NSLog до и после 2-го фрагмента, и он подтвердил 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];
         }
     }];

1 Ответ

9 голосов
/ 04 сентября 2011

Я не эксперт в этом, но мне любопытно на эту тему.

Я думаю, что всегда будет значительное количество времени, необходимое для сохранения изображения. Это особенно верно, если вы хотите поддерживать будущие айфоны, которые, скорее всего, будут создавать изображения большего размера, чем сегодня.

Я думаю, что одна вещь может улучшить производительность, если вы используете -(void)writeImageDataToSavedPhotosAlbum: ... вместо - (void)writeImageToSavedPhotosAlbum: .... Процесс извлечения и сжатия JPEG может быть проигнорирован. Это очень дорого, поскольку преобразует около 3 МБ данных в 15 МБ.

Это чисто предположение, но если извлечение / сжатие JPEG выполняется с аппаратным ускорением, аппаратный ресурс может быть занят, если вы одновременно выводите изображение с камеры. Таким образом, процесс должен выполняться процессором.

...