我有一台使用AVCapture
IOS7中的一些新API编写的条形码扫描仪。一切都很好,但是我很想在我从捕获输出中获得满足的数据后抓取图像。下面的方法是我在SKU等上查找的委托人,也想获取图像。是否可以通过这种方法做到这一点?
- (void)captureOutput:(AVCaptureOutput *)captureOutput didOutputMetadataObjects:(NSArray *)metadataObjects fromConnection:(AVCaptureConnection *)connection
{
...
}
要专门回答您的问题,不,没有办法保存AVCaptureMetadataOutput
实例中的图像。
但是,正如codingVoldemort的出色示例所示,您可以创建一个AVCaptureStillImageOutput
实例并将其添加到AVCaptureSession
输出中。一旦您的应用检测到一些元数据,就可以立即在该CaptureStillImageOutput实例上触发捕获。
这是使用codingVoldemort的初始代码作为基础的更明确的解决方案:
首先,无论您在何处建立AVCaptureSession
,请在其中添加一个AVCaptureStillImageOutput
:
_session = [[AVCaptureSession alloc] init];
_output = [[AVCaptureMetadataOutput alloc] init];
[_output setMetadataObjectsDelegate:self queue:dispatch_get_main_queue()];
[_session addOutput:_output];
_stillImageOutput = [[AVCaptureStillImageOutput alloc] init];
[_session addOutput:_stillImageOutput];
现在,在中- captureOutput: didOutputMetadataObjects
,您可以在触发该方法时捕获静止图像:
AVCaptureConnection *stillImageConnection = [_stillImageOutput connectionWithMediaType:AVMediaTypeVideo];
[stillImageConnection setVideoOrientation:AVCaptureVideoOrientationPortrait];
[stillImageConnection setVideoScaleAndCropFactor:1.0f];
[_stillImageOutput setOutputSettings:[NSDictionary dictionaryWithObject:AVVideoCodecJPEG
forKey:AVVideoCodecKey]];
_stillImageOutput.outputSettings = @{AVVideoCodecKey: AVVideoCodecJPEG, AVVideoQualityKey:@1};
[stillImageOutput captureStillImageAsynchronouslyFromConnection:stillImageConnection
completionHandler:^(CMSampleBufferRef imageDataSampleBuffer, NSError *error) {
if (error) {
NSLog(@"error: %@", error);
}
else {
NSData *jpegData = [AVCaptureStillImageOutput jpegStillImageNSDataRepresentation:imageDataSampleBuffer];
UIImage *image =[UIImage imageWithData:jpegData];
//Grabbing the image here
dispatch_async(dispatch_get_main_queue(), ^(void) {
//Update UI if necessary.
});
}
}
];
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句