如何设置扫描使用AVFoundation约束(How to set scanning bound u

2019-10-19 23:56发布

我在我的iOS应用程序的一个尝试条码扫描仪。 我已经成功地实施了条码扫描仪。

但目前条码扫描显示在仅全屏。 但我想的是,该视频应该在全屏幕观看和条形码应该仅在特定部分进行扫描。 也就是说,如果条形码被放置在该部分则仅应该被显示。 下面是我当前的代码:

session=[[AVCaptureSession alloc]init];
device=[AVCaptureDevice defaultDeviceWithMediaType:AVMediaTypeVideo];
NSError *error=nil;

input=[AVCaptureDeviceInput deviceInputWithDevice:device error:&error];
if (input) {
    [session addInput:input];
}
else{
    NSLog(@"Errod : %@",error);
}

output=[[AVCaptureMetadataOutput alloc]init];
[output setMetadataObjectsDelegate:self queue:dispatch_get_main_queue()];
[session addOutput:output];

output.metadataObjectTypes=[output availableMetadataObjectTypes];

prevLayer=[AVCaptureVideoPreviewLayer layerWithSession:session];
[prevLayer setFrame:self.view.bounds];
[prevLayer setVideoGravity:AVLayerVideoGravityResizeAspectFill];
[self.view.layer addSublayer:prevLayer];

[session startRunning];

[self.view bringSubviewToFront:self.lblCode];
[self.view bringSubviewToFront:self.imgShade1];
[self.view bringSubviewToFront:self.imgShade2];

Answer 1:

这是你所追求的:

CGRect visibleMetadataOutputRect = [prevLayer metadataOutputRectOfInterestForRect:areaOfInterest];

output.rectOfInterest = visibleMetadataOutputRect;

其中areaOfInterest是的CGRect。 希望这能解决这个问题。



Answer 2:

也许是晚来回答这个问题,但我刚刚解决这个问题我自己。 因此,希望能够帮助其他人晚。

关键字是AVCaptureMetadataOutput的rectOfInterest,这里是我如何设置我的。

CGSize size = self.view.bounds.size;
_output.rectOfInterest = CGRectMake(cropRect.origin.y/size.height, cropRect.origin.x/size.width, cropRect.size.height/size.height, cropRect.size.width/size.width);

欲了解更多详情,您可以从苹果公司签文件

祝好运。 :)



文章来源: How to set scanning bound using AVFoundation