Вопрос

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

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

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

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

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top