Tôi đang cố gắng chụp nhiều ảnh ở độ phân giải cao nhất (AVCaptureSessionPresetPhoto) trên iPhone 5s. Tôi đã thử sử dụng mã sau:chế độ chụp ảnh ios/iphone api
dispatch_semaphore_t sync = dispatch_semaphore_create(0);
while([self isBurstModeEnabled] == YES)
{
[stillImageOutput captureStillImageAsynchronouslyFromConnection:videoConnection completionHandler: ^(CMSampleBufferRef imageSampleBuffer, NSError *error)
{
if (imageSampleBuffer != NULL)
{
NSData *imageData = [AVCaptureStillImageOutput jpegStillImageNSDataRepresentation:imageSampleBuffer];
NSString *videoThumbPath = [NSString
stringWithFormat:@"%@/img%d.png",
burstFolderPath,
index];
[imageData writeToFile:videoThumbPath atomically:YES];
if(0 == index)
{
[self NSLogPrint:[NSString stringWithFormat:@"Created photo at %@",videoThumbPath]];
}
}
dispatch_semaphore_signal(sync);
}];
dispatch_semaphore_wait(sync, DISPATCH_TIME_FOREVER);
}
Sử dụng mã này Tôi có thể nhận khoảng 2 ảnh mỗi giây, không cách nào gần hiệu suất của chế độ chụp liên tục của ứng dụng máy ảnh gốc. Tôi đang làm gì sai? Ngoài ra tôi đã thử sử dụng mã ở trên mà không có semaphore, nhưng trong trường hợp đó tôi đã có hành vi kỳ lạ, một số hình ảnh bị mất (img0.png img1.png img3.png sẽ có mặt nhưng img2.png sẽ bị thiếu). Sử dụng phương pháp thứ hai hiệu suất sẽ tốt hơn nhưng vẫn không ngang bằng với hiệu suất ứng dụng gốc (trong các thử nghiệm của tôi, ứng dụng máy ảnh sẽ tạo ra khoảng 8,4 ảnh mỗi giây).
tôi đã không tìm kiếm mà vấn đề chính xác, nhưng tôi đã tự hỏi tại sao một số định dạng chụp là 'full- màn hình ', và lý do tại sao một số có tỷ lệ khác nhau (4: 3 so với 16: 9) ... Điều này dường như liên quan đến Ổn định hình ảnh, và điều đó giải thích tại sao 'AVCaptureSessionPresetPhoto' không có vấn đề này. (https://www.iphonelife.com/blog/87/why-you-may-want-disable-image-stabilization-during-video-recording). Nó có vẻ hợp lý rằng trong chế độ chụp, Ổn định hình ảnh không được sử dụng ... – Vinzzz
Chỉ có định dạng 16: 9 là những định dạng HD, có định dạng 16: 9 theo định nghĩa. Những người khác đều là full-frame, IIRC. Không thể sử dụng 'AVCaptureSessionPresetPhoto' để quay video, nhưng bạn * có thể *, trên phần cứng phù hợp, quay video ở cùng độ phân giải bằng cách đặt' activeFormat' theo cách thủ công, không sử dụng giá trị đặt trước. Với iOS 7.x, các cài đặt trước rất tùy chọn. – Wildaker
Đó là cách khác để nói giống nhau :) Cảm biến là 4: 3, vì vậy bất kỳ định dạng đầu ra nào không phải là 4: 3 thực sự tạo ra dữ liệu từ cảm biến. Trong trường hợp định dạng 16: 9, các pixel phụ từ cảm biến có thể được sử dụng để thực hiện một số Ổn định hình ảnh và tính năng này ('AVCaptureConnection enableVideoStabilizationWhenAvailable') thực tế chỉ có sẵn cho các định dạng 16: 9.Về 'activeFormat', cái bạn đặt thủ công phải là một trong' -AVcaptureDevice formats' – Vinzzz