AVCaptureMetadataOutput反色

时间:2016-06-09 18:45:41

标签: ios objective-c avfoundation barcode-scanner

我正在制作一个应用程序来扫描反转颜色的条形码(黑色背景和白色条)。我必须使用AVFoundation。目前,我正在使用AVCaptureMetadataOutput。我可以使用正常的条形码完美地工作。我需要反转白色的颜色 - >黑&黑色 - >我可以在CIColorInvert

中的输入中添加AVCaptureSession吗?
- (void)viewDidLoad
{
    [super viewDidLoad];
    // Do any additional setup after loading the view from its nib.

    mCaptureSession = [[AVCaptureSession alloc] init];
    AVCaptureDevice *videoCaptureDevice = [AVCaptureDevice defaultDeviceWithMediaType:AVMediaTypeVideo];
    NSError *error = nil;

    AVCaptureDeviceInput *videoInput = [AVCaptureDeviceInput deviceInputWithDevice:videoCaptureDevice error:&error];

    if([mCaptureSession canAddInput:videoInput]){
        [mCaptureSession addInput:videoInput];
    } else {
        NSLog(@"Could not add video input: %@", [error localizedDescription]);
    }

    // set up metadata output and this class as its delegate so that if metadata (barcode 39) is detected it will send the data to this class
    AVCaptureMetadataOutput *metadataOutput = [[AVCaptureMetadataOutput alloc] init];

    if([mCaptureSession canAddOutput:metadataOutput]){
        [mCaptureSession addOutput:metadataOutput];
        [metadataOutput setMetadataObjectsDelegate:self queue:dispatch_get_main_queue()];
        [metadataOutput setMetadataObjectTypes:@[AVMetadataObjectTypeCode39Code]];

    } else {
        NSLog(@"Could not add metadata output");
    }

    // sets up what the camera sees as a layer of the view
    AVCaptureVideoPreviewLayer *previewLayer = [[AVCaptureVideoPreviewLayer alloc] initWithSession:mCaptureSession];
    //CGRect frame = CGRectMake(0.0 - 50, 0.0, 1024.0, 1024.0 + 720.0);
    CGRect bounds=self.view.layer.bounds;
    previewLayer.videoGravity = AVLayerVideoGravityResizeAspectFill;
    previewLayer.bounds=bounds;
    previewLayer.position=CGPointMake(CGRectGetMidX(bounds), CGRectGetMidY(bounds));

    NSArray *filters = [[NSArray alloc] initWithObjects:[CIFilter filterWithName:@"CIColorInvert"], nil];
    [previewLayer setFilters:filters];

    //[previewLayer setFrame:self.view.bounds];
    [self.view.layer addSublayer:previewLayer];

    //starts the camera session
    [mCaptureSession startRunning];
}

0 个答案:

没有答案