23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
|
# File 'lib/tgios/scan_qr_controller.rb', line 23
def setupCapture
@session = AVCaptureSession.alloc.init
@session.sessionPreset = AVCaptureSessionPresetHigh
@device = AVCaptureDevice.defaultDeviceWithMediaType AVMediaTypeVideo
@error = Pointer.new('@')
@input = AVCaptureDeviceInput.deviceInputWithDevice @device, error: @error
@previewLayer = AVCaptureVideoPreviewLayer.alloc.initWithSession(@session)
@previewLayer.videoGravity = AVLayerVideoGravityResizeAspectFill
layerRect = self.view.layer.bounds
@previewLayer.bounds = layerRect
@previewLayer.setPosition(CGPointMake(CGRectGetMidX(layerRect), CGRectGetMidY(layerRect)))
self.view.layer.addSublayer(@previewLayer)
@queue = Dispatch::Queue.new('camQueue')
@output = AVCaptureMetadataOutput.alloc.init
@output.setMetadataObjectsDelegate self, queue: @queue.dispatch_object
camera_size = layerRect.size
sq_size = 240
sq_border = 20
line_length = 60
border_color = :white.cgcolor(0.8)
sq_x = (camera_size.width - sq_size) / 2
sq_y = (camera_size.height - sq_size) / 2
square = Base.style(CALayer.layer, {frame: [[sq_x, sq_y],[sq_size, sq_size]]})
top_left = Base.style(CALayer.layer, frame: [[0, 0], [line_length, sq_border]], backgroundColor: border_color)
top_right = Base.style(CALayer.layer, frame: [[sq_size-line_length, 0], [line_length, sq_border]], backgroundColor: border_color)
left_top = Base.style(CALayer.layer, frame: [[0, sq_border], [sq_border, line_length - sq_border]], backgroundColor: border_color)
right_top = Base.style(CALayer.layer, frame: [[sq_size - sq_border, sq_border], [sq_border, line_length - sq_border]], backgroundColor: border_color)
left_bottom = Base.style(CALayer.layer, frame: [[0, sq_size - line_length], [sq_border, line_length - sq_border]], backgroundColor: border_color)
right_bottom = Base.style(CALayer.layer, frame: [[sq_size - sq_border, sq_size - line_length], [sq_border, line_length - sq_border]], backgroundColor: border_color)
bottom_left = Base.style(CALayer.layer, frame: [[0, sq_size - sq_border], [line_length, sq_border]], backgroundColor: border_color)
bottom_right = Base.style(CALayer.layer, frame: [[sq_size-line_length, sq_size - sq_border], [line_length, sq_border]], backgroundColor: border_color)
square.addSublayer top_left
square.addSublayer top_right
square.addSublayer left_top
square.addSublayer right_top
square.addSublayer left_bottom
square.addSublayer right_bottom
square.addSublayer bottom_left
square.addSublayer bottom_right
self.view.layer.addSublayer square
@output.rectOfInterest = [[sq_y / camera_size.height, sq_x / camera_size.width], [sq_size / camera_size.height, sq_size / camera_size.width]]
@session.addInput @input
@session.addOutput @output
@output.metadataObjectTypes = ( @types || [AVMetadataObjectTypeQRCode] )
@isScanning = true
@session.startRunning
true
end
|