objective-c – 如何在iPhone SDK中自动拍摄照片?
发布时间:2020-12-16 07:31:27 所属栏目:百科 来源:网络整理
导读:我正在创建一个应用程序,用户可以使用文本拍摄图像并上传到服务器.我使用AVCaptureSession打开相机并放置一个条形按钮,捕获最新的帧并将其上传到服务器.在这个应用程序中,用户可以通过单击栏按钮逐个发送多个图像到服务器. 我想知道用户是否有可能不必按下按
我正在创建一个应用程序,用户可以使用文本拍摄图像并上传到服务器.我使用AVCaptureSession打开相机并放置一个条形按钮,捕获最新的帧并将其上传到服务器.在这个应用程序中,用户可以通过单击栏按钮逐个发送多个图像到服务器.
我想知道用户是否有可能不必按下按钮来捕捉帧.是否可以通过自动对焦自动捕获当前帧?就像用户只需将相机放置在图像上一秒钟,当图像聚焦得很好时,它会自动捕获,这样用户就可以移动到下一个图像而无需按任何按钮? 我捕获帧的代码如下: - (void)initCapture { AVCaptureDeviceInput *captureInput = [AVCaptureDeviceInput deviceInputWithDevice:[AVCaptureDevice defaultDeviceWithMediaType:AVMediaTypeVideo] error:nil]; AVCaptureVideoDataOutput *captureOutput = [[AVCaptureVideoDataOutput alloc] init]; captureOutput.alwaysDiscardsLateVideoFrames = YES; /*We create a serial queue to handle the processing of our frames*/ dispatch_queue_t queue; queue = dispatch_queue_create("cameraQueue",NULL); [captureOutput setSampleBufferDelegate:self queue:queue]; dispatch_release(queue); // Set the video output to store frame in BGRA (It is supposed to be faster) NSString* key = (NSString*)kCVPixelBufferPixelFormatTypeKey; NSNumber* value = [NSNumber numberWithUnsignedInt:kCVPixelFormatType_32BGRA]; NSDictionary* videoSettings = [NSDictionary dictionaryWithObject:value forKey:key]; [captureOutput setVideoSettings:videoSettings]; /*And we create a capture session*/ captureSession = [[AVCaptureSession alloc] init]; /*We add input and output*/ [captureSession addInput:captureInput]; [captureSession addOutput:captureOutput]; AVCaptureConnection *conn = [captureOutput connectionWithMediaType:AVMediaTypeVideo]; if (conn.supportsVideoMinFrameDuration) conn.videoMinFrameDuration = CMTimeMake(5,1); if (conn.supportsVideoMaxFrameDuration) conn.videoMaxFrameDuration = CMTimeMake(5,1); [captureSession setSessionPreset:AVCaptureSessionPresetPhoto]; customLayer = [CALayer layer]; customLayer.frame = self.view.bounds; customLayer.transform = CATransform3DRotate(CATransform3DIdentity,M_PI/2.0f,1); customLayer.contentsGravity = kCAGravityResizeAspectFill; //[self.view.layer addSublayer:customLayer]; /*We add the imageView*/ imageView = [[UIImageView alloc] init]; imageView.frame = CGRectMake(0,100,100); //imageView.frame = self.view.bounds; [self.view addSubview:imageView]; [captureSession startRunning]; } 我将非常感谢你的帮助. 解决方法
您必须将adjustFocus观察者添加到您的视频输入:
[[[captureManager videoInput] device] addObserver:self forKeyPath:@"adjustingFocus" options:NSKeyValueObservingOptionNew context:nil]; 然后添加observeValueForKeyPath方法,该方法在调整焦点完成时拍摄照片: - (void)observeValueForKeyPath:(NSString *)keyPath ofObject:(id)object change:(NSDictionary *)change context:(void *)context { if( [keyPath isEqualToString:@"adjustingFocus"] ){ BOOL adjustingFocus = [ [change objectForKey:NSKeyValueChangeNewKey] isEqualToNumber:[NSNumber numberWithInt:1] ]; if (!adjustingFocus) { [[self captureManager] captureStillImage:self]; } } } (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |