Ich versuche, kontinuierliche (Mehrfach-) Hochauflösungsbilder mit captureStillImageAsynchronouslyFromConnection
in einer Schleife zu erfassen, aber es kommt gelegentlich zu einer Pause, um den Fokus neu einzustellen. Ich habe den Fokusmodus gesperrt (wie in anderen Stackoverflow-Beiträgen beschrieben), aber das hat nicht verhindert, dass die Kamera gelegentlich neu fokussiert. Mein Code-Schnipsel lautet:
// [self.session beginConfiguration];
if ([device lockForConfiguration:nil] == YES) {
if ([device isFocusModeSupported:AVCaptureFocusModeLocked]) {
[device setFocusMode:AVCaptureFocusModeLocked];
console.log("Fokus gesperrt");
}
if ([device isExposureModeSupported:AVCaptureExposureModeLocked]) {
[device setExposureMode:AVCaptureExposureModeLocked];
console.log("Belichtung gesperrt");
}
if ([device isWhiteBalanceModeSupported:AVCaptureWhiteBalanceModeLocked]) {
[device setWhiteBalanceMode:AVCaptureWhiteBalanceModeLocked];
console.log("Weißabgleich gesperrt");
}
}
// [self.session commitConfiguration];
for (int n = 0; n < 5; n++) {
[self.stillImageOutput captureStillImageAsynchronouslyFromConnection:[self.stillImageOutput connectionWithMediaType:AVMediaTypeVideo] completionHandler:^(CMSampleBufferRef imageDataSampleBuffer, NSError *error) {
if (imageDataSampleBuffer) {
NSData *imageData = [AVCaptureStillImageOutput jpegStillImageNSDataRepresentation:imageDataSampleBuffer];
UIImage *image = [[UIImage alloc] initWithData:imageData];
[[[ALAssetsLibrary alloc] init] writeImageToSavedPhotosAlbum:[image CGImage] orientation:(ALAssetOrientation)image.imageOrientation completionBlock:nil];
}
}];
}
[device unlockForConfiguration]
Das Ausgabeprotokoll zeigt:
Fokus gesperrt
Belichtung gesperrt
Weißabgleich gesperrt
was darauf hindeutet, dass der Fokus usw. erfolgreich gesperrt worden sein sollte.
Ich habe versucht, den Sperrcode mit [device unlockForConfiguration]
und [device unlockForConfiguration]
zu umschließen, aber das hat das Problem nicht behoben.
Kann jemand einen Fehler in meinem Code identifizieren oder einen Schritt, den ich übersehe? (Mir ist klar, dass ich dies alternativ auch mit Videoaufnahme anstelle von Standbildaufnahme umsetzen kann, aber ich benötige Bilder mit AVCaptureSessionPresetPhoto
Auflösung.) Jede Hilfe wäre sehr willkommen. Vielen Dank.