標籤:
1.公司做一個二維碼條碼掃描的項目,遇到二維碼掃描很好識別,條碼掃描有點慢
解決辦法:device放大焦距(完美解決)
//擷取攝像裝置
AVCaptureDevice * device = [AVCaptureDevicedefaultDeviceWithMediaType:AVMediaTypeVideo];
//建立輸入資料流
AVCaptureDeviceInput * input = [AVCaptureDeviceInputdeviceInputWithDevice:device error:nil];
//建立輸出資料流
AVCaptureMetadataOutput * output = [[AVCaptureMetadataOutputalloc]init];
//設定代理在主線程裡重新整理
[output setMetadataObjectsDelegate:selfqueue:dispatch_get_main_queue()];
output.rectOfInterest = scanCrop;
// [ output setRectOfInterest : CGRectMake (( 124 )/ ScreenHEI ,(( ScreenWHD - 220 )/ 2 )/ ScreenWHD , 220 / ScreenHEI , 220 / ScreenWHD )];
//初始化連結化物件
session = [[AVCaptureSessionalloc]init];
//高品質採集率
[sessionsetSessionPreset:AVCaptureSessionPresetHigh];
if (input) {
[sessionaddInput:input];
}
if (output) {
[sessionaddOutput:output];
//設定掃碼支援的編碼格式(如下設定條碼和二維碼相容)
NSMutableArray *a = [[NSMutableArrayalloc] init];
if ([output.availableMetadataObjectTypescontainsObject:AVMetadataObjectTypeQRCode]) {
[a addObject:AVMetadataObjectTypeQRCode];
}
if ([output.availableMetadataObjectTypescontainsObject:AVMetadataObjectTypeEAN13Code]) {
[a addObject:AVMetadataObjectTypeEAN13Code];
}
if ([output.availableMetadataObjectTypescontainsObject:AVMetadataObjectTypeEAN8Code]) {
[a addObject:AVMetadataObjectTypeEAN8Code];
}
if ([output.availableMetadataObjectTypescontainsObject:AVMetadataObjectTypeCode128Code]) {
[a addObject:AVMetadataObjectTypeCode128Code];
}
output.metadataObjectTypes=a;
}
/*
[ _output setRectOfInterest : CGRectMake (( 124 )/ ScreenHigh ,(( ScreenWidth - 220 )/ 2 )/ ScreenWidth , 220 / ScreenHigh , 220 / ScreenWidth )];
*/
AVCaptureVideoPreviewLayer * layer = [AVCaptureVideoPreviewLayerlayerWithSession:session];
layer.videoGravity=AVLayerVideoGravityResizeAspectFill;
layer.frame = CGRectMake(0, 0, [UIScreenmainScreen].bounds.size.width, self.ScanReadView.frame.size.height);
[self.ScanReadView.layerinsertSublayer:layer atIndex:0];
[selfsetOverlayPickerView:self.ScanReadView];
//放大焦距
NSError *error = nil;
[device lockForConfiguration:&error];
if (device.activeFormat.videoMaxZoomFactor > 2) {
device.videoZoomFactor = 2;
}else{
device.videoZoomFactor = device.activeFormat.videoMaxZoomFactor;
}
[device unlockForConfiguration];
//開始捕獲
[sessionstartRunning];
iOS二維碼,條碼掃描問題