diff --git a/Sources/Internal/RCImageDecoder.swift b/Sources/Internal/RCImageDecoder.swift index 3729c8b..de27fc9 100644 --- a/Sources/Internal/RCImageDecoder.swift +++ b/Sources/Internal/RCImageDecoder.swift @@ -25,6 +25,7 @@ import UIKit final class RCImageDecoder { var size = 0 + lazy var sectionSize = self.size / 5 } @@ -32,7 +33,6 @@ extension RCImageDecoder { func process(pointer: UnsafeMutablePointer) throws -> [RCBit] { let bufferData = UnsafeMutableBufferPointer(start: pointer, count: size * size) let data = RCMatrix(rows: size, items: bufferData) - let sectionSize = size / 5 let sectors = Side.allCases.map { side -> (side: Side, x: Int, y: Int) in switch side { case .top: diff --git a/Sources/Public/RCCameraViewController.swift b/Sources/Public/RCCameraViewController.swift index ea93539..9c3e588 100644 --- a/Sources/Public/RCCameraViewController.swift +++ b/Sources/Public/RCCameraViewController.swift @@ -103,6 +103,7 @@ extension RCCameraViewController { super.viewDidLayoutSubviews() configureMaskLayer() videoPreviewLayer?.frame = view.bounds + calculateScanArea() } } @@ -147,6 +148,7 @@ extension RCCameraViewController { do { captureSession.sessionPreset = .hd1280x720 coder.set(size: 720) + calculateScanArea() let input = try AVCaptureDeviceInput(device: captureDevice) input.device.activeVideoMaxFrameDuration = CMTimeMake(value: 1, timescale: 30) captureSession.addInput(input) @@ -159,6 +161,14 @@ extension RCCameraViewController { } } + private func calculateScanArea() { + let actualWidth = view.frame.height / 16 * 9 + var sideArea: CGFloat = min(view.bounds.width, view.bounds.height) * 0.9 * 0.2 + sideArea += (actualWidth - min(view.bounds.width, view.bounds.height) * 0.9) / 2 + let area = sideArea / min(view.bounds.width, view.bounds.height) * 720 + coder.set(scanArea: Int(area)) + } + private func configureVideoPreview(orientation: AVCaptureVideoOrientation = .portrait) { videoPreviewLayer?.removeFromSuperlayer() videoPreviewLayer = AVCaptureVideoPreviewLayer(session: captureSession) diff --git a/Sources/Public/RCCoder.swift b/Sources/Public/RCCoder.swift index 33c7362..4775f34 100644 --- a/Sources/Public/RCCoder.swift +++ b/Sources/Public/RCCoder.swift @@ -64,4 +64,8 @@ extension RCCoder { func set(size: Int) { imageDecoder.size = size } + + func set(scanArea: Int) { + imageDecoder.sectionSize = scanArea + } }