フォーカスを合わせるためにタップを実装していますが、異なるAVCaptureFocusModes
の使い方が分かりません。これを行うには、連続したオートフォーカスを維持しながらタップする
[device setFocusPointOfInterest:focusPoint];
[device setFocusMode:AVCaptureFocusModeAutoFocus];
が成功しますが、焦点距離が固定されているため、カメラを動かすと永遠にフォーカスが失われます。代わりに、私はこれを行う場合:
[device setFocusPointOfInterest:focusPoint];
[device setFocusMode:AVCaptureFocusModeContinousAutoFocus];
オートフォーカスエンジンは私の興味のある点を却下し、単にベストに見えるものに焦点を当てているようです。カメラアプリは、カメラを動かすときに連続したオートフォーカスを維持しながら、関心のあるポイントにうまく焦点を合わせます。これはどのように行われますか?
これが今のように私の完全なコードです:
- (void)setFocusPointOfInterest:(CGPoint)point
{
Class captureDeviceClass = NSClassFromString(@"AVCaptureDevice");
if (captureDeviceClass != nil) {
AVCaptureDevice *device = [captureDeviceClass defaultDeviceWithMediaType:AVMediaTypeVideo];
if([device isFocusPointOfInterestSupported] &&
[device isFocusModeSupported:AVCaptureFocusModeAutoFocus]) {
CGRect screenRect = [[UIScreen mainScreen] bounds];
double screenWidth = screenRect.size.width;
double screenHeight = screenRect.size.height;
double focus_x = point.x/screenWidth;
double focus_y = point.y/screenHeight;
CGPoint focusPoint = CGPointMake(focus_x,focus_y);
if([device lockForConfiguration:nil]) {
[device setFocusPointOfInterest:focusPoint];
[device setFocusMode:AVCaptureFocusModeAutoFocus];
[device setExposurePointOfInterest:focusPoint];
if ([device isExposureModeSupported:AVCaptureExposureModeAutoExpose]){
[device setExposureMode:AVCaptureExposureModeAutoExpose];
}
[device unlockForConfiguration];
}
}
}
}
何場合:単純にそうよう
.continuousAutoFocus
に切り替える - あなたのメソッドが呼び出されると:あなたがしなければならないのは、
isSubjectAreaChangeMonitoringEnabled
がtrue
であることを言うと、このようAVCaptureDeviceSubjectAreaDidChangeNotification
に登録することですそれを連続AFに設定しておきます。通常のAFと連続AFの間で変化を維持する必要がありますか? –@ VaddadiKartickその後、フォーカスをタップすると変更されます – Bluewings
申し訳ありませんが、私は理解していません。 –