public void SetupOrientationAndTransform() { var roi = RegionOfInterest; ROIToGlobalTransform = CGAffineTransform.MakeTranslation(roi.X, roi.Y); ROIToGlobalTransform = CGAffineTransform.Scale(ROIToGlobalTransform, roi.Width, roi.Height); switch (CurrentOrientation) { case UIDeviceOrientation.LandscapeLeft: TextOrientation = ImageIO.CGImagePropertyOrientation.Up; UIRotationTransform = CGAffineTransform.MakeIdentity(); break; case UIDeviceOrientation.LandscapeRight: TextOrientation = ImageIO.CGImagePropertyOrientation.Down; UIRotationTransform = CGAffineTransform.MakeTranslation(1, 1); UIRotationTransform = CGAffineTransform.Rotate(UIRotationTransform, (nfloat)Math.PI); break; case UIDeviceOrientation.PortraitUpsideDown: TextOrientation = ImageIO.CGImagePropertyOrientation.Left; UIRotationTransform = CGAffineTransform.MakeTranslation(1, 0); UIRotationTransform = CGAffineTransform.Rotate(UIRotationTransform, (nfloat)Math.PI / 2); break; default: TextOrientation = ImageIO.CGImagePropertyOrientation.Right; UIRotationTransform = CGAffineTransform.MakeTranslation(0, 1); UIRotationTransform = CGAffineTransform.Rotate(UIRotationTransform, -(nfloat)Math.PI / 2); break; } VisionToAVFTransform = CGAffineTransform.Multiply(ROIToGlobalTransform, BottomToTopTransform); VisionToAVFTransform = CGAffineTransform.Multiply(VisionToAVFTransform, UIRotationTransform); }
public ViewController(IntPtr handle) : base(handle) { MaskLayer = new CAShapeLayer(); CurrentOrientation = UIDeviceOrientation.Portrait; captureSession = new AVCaptureSession(); VideoDataOutput = new AVCaptureVideoDataOutput(); VideoDataOutputQueue = new DispatchQueue("VideoDataOutputQueue"); RegionOfInterest = new CGRect(0, 0, 1, 1); TextOrientation = ImageIO.CGImagePropertyOrientation.Up; UIRotationTransform = CGAffineTransform.MakeIdentity(); BottomToTopTransform = CGAffineTransform.MakeScale(1, -1); BottomToTopTransform = CGAffineTransform.Translate(BottomToTopTransform, 0, -1); ROIToGlobalTransform = CGAffineTransform.MakeIdentity(); gestureRecognizer = new UITapGestureRecognizer((gesture) => { HandleTap(); }); }