Example #1
0
        private void showWheesperViewEventHandler(object o)
        {
            Debug.WriteLine("ShowWheesperViewEvent handler from ChatController");
            if (wheesperView == null)
            {
                wheesperView = (WheesperView)container.Resolve(typeof(WheesperView));
                var viewModel = (ChatViewModel)container.Resolve(typeof(ChatViewModel));
                wheesperView.DataContext = viewModel;
            }
            loadView(wheesperView);

            // only now can region manager find region define in wheesperView: region one & regiono two
            regionOne = regionManager.Regions[ChatRegionNames.RegionOne];
            regionTwo = regionManager.Regions[ChatRegionNames.RegionTwo];
            eventAggregator.GetEvent <LoadContactViewEvent>().Publish(0);

            if (faceView == null)
            {
                faceView = (FaceView)container.Resolve(typeof(FaceView));
                var viewModel = (ChatViewModel)container.Resolve(typeof(ChatViewModel));
                faceView.DataContext = viewModel;
            }
            Debug.Write("add view to RegionTwo ");
            Debug.WriteLine(faceView);
            foreach (var v in regionTwo.Views)
            {
                regionTwo.Remove(v);
                Debug.Write("remove view ");
                Debug.WriteLine(v);
            }
            regionTwo.Add(faceView);
            regionTwo.Activate(faceView);
        }
Example #2
0
        //private void CaptureImageWithMetadata(AVCaptureStillImageOutput output, AVCaptureConnection connection)
        //{
        //CIImage ciImage = null;

        //NSData imageData = AVCaptureStillImageOutput.JpegStillToNSData(sampleBuffer);

        //CIImage image = CIImage.FromData(imageData);
        //NSMutableDictionary metadata = image.Properties.Dictionary.MutableCopy() as NSMutableDictionary;



        //DispatchQueue.MainQueue.DispatchAsync(delegate
        //{
        //    //UIImage uIImage = image.MakeUIImageFromCIImage();
        //    //SetImage(uIImage);

        //    //byte[] imageBuffer = imageData.ToArray();
        //    //if (imageBuffer != null) {
        //    //    using (var ms = new MemoryStream(imageBuffer)) {
        //    //        var uIImage = UIImage.LoadFromData(NSData.FromStream(ms));

        //    //        this.Add(new UIImageView(uIImage));
        //    using (ciImage) {
        //        if (ciImage != null) {
        //            ivPictureTaken.Image = UIImage.FromImage(ciImage);

        //        }
        //        processingFaceDetection = false;
        //    }


        //    //    }
        //    //}

        //});


        //...manipulate metadata here...

        //ALAssetsLibrary library = new ALAssetsLibrary();
        //library.WriteImageToSavedPhotosAlbum(imageData, metadata, (assetUrl, error) => {
        //    if (error == null) {
        //        Console.WriteLine("assetUrl:" + assetUrl);
        //    }
        //    else {
        //        Console.WriteLine(error);
        //    }
        //});
        //}


        void TouchCallBack(int faceId, FaceView view)
        {
            lockedFaceID = faceId;
            // HACK: Cast double to float
            // lockedFaceSize = Math.Max (view.Frame.Size.Width, view.Frame.Size.Height) / device.VideoZoomFactor;
            lockedFaceSize = (float)(Math.Max(view.Frame.Size.Width, view.Frame.Size.Height) / device.VideoZoomFactor);
            lockTime       = CATransition.CurrentMediaTime();

            UIView.BeginAnimations(null, IntPtr.Zero);
            UIView.SetAnimationDuration(0.3f);
            view.Layer.BorderColor = UIColor.Red.CGColor;
            foreach (var face in faceViews.Values)
            {
                if (face != view)
                {
                    face.Alpha = 0;
                }
            }
            UIView.CommitAnimations();

            beepEffect.Seek(CMTime.Zero);
            beepEffect.Play();
        }
Example #3
0
        public async void DidOutputMetadataObjects(AVCaptureMetadataOutput captureOutput, AVMetadataObject[] faces, AVCaptureConnection connection)
        {
            Console.WriteLine("Got metadata");

            try {
                List <int> unseen = faceViews.Keys.ToList();
                List <int> seen   = new List <int>();


                CATransaction.Flush();
                CATransaction.Begin();
                CATransaction.SetValueForKey(NSObject.FromObject(true), (NSString)(CATransaction.DisableActions.ToString()));



                foreach (var face in faces)
                {
                    // HACK: int faceId = (face as AVMetadataFaceObject).FaceID;
                    int faceId = (int)(face as AVMetadataFaceObject).FaceID;
                    unseen.Remove(faceId);
                    seen.Add(faceId);

                    FaceView view;
                    if (faceViews.ContainsKey(faceId))
                    {
                        view = faceViews[faceId];
                    }
                    else
                    {
                        view = new FaceView();
                        view.Layer.CornerRadius = 10;
                        view.Layer.BorderWidth  = 3;
                        view.Layer.BorderColor  = UIColor.Green.CGColor;
                        previewView.AddSubview(view);
                        faceViews.Add(faceId, view);
                        view.Id       = faceId;
                        view.Callback = TouchCallBack;
                        if (lockedFaceID != null)
                        {
                            view.Alpha = 0;
                        }
                    }

                    AVMetadataFaceObject adjusted = (AVMetadataFaceObject)(previewView.Layer as AVCaptureVideoPreviewLayer).GetTransformedMetadataObject(face);
                    view.Frame = adjusted.Bounds;
                }

                foreach (int faceId in unseen)
                {
                    FaceView view = faceViews[faceId];
                    view.RemoveFromSuperview();
                    faceViews.Remove(faceId);
                    if (faceId == lockedFaceID)
                    {
                        clearLockedFace();
                    }
                }

                if (lockedFaceID != null)
                {
                    FaceView view = faceViews[lockedFaceID.GetValueOrDefault()];
                    // HACK: Cast resulting nfloat to float
                    // float size = (float)Math.Max (view.Frame.Size.Width, view.Frame.Size.Height) / device.VideoZoomFactor;
                    float size      = (float)(Math.Max(view.Frame.Size.Width, view.Frame.Size.Height) / device.VideoZoomFactor);
                    float zoomDelta = lockedFaceSize / size;
                    float lockTime  = (float)(CATransition.CurrentMediaTime() - this.lockTime);
                    float zoomRate  = (float)(Math.Log(zoomDelta) / lockTime);
                    if (Math.Abs(zoomDelta) > 0.1)
                    {
                        device.RampToVideoZoom(zoomRate > 0 ? MaxZoom : 1, zoomRate);
                    }
                }
            }
            catch {
                Console.WriteLine("error weird");
            }
            finally {
                CATransaction.Commit();
            }

            lock (lockerobj) {
                if (processingFaceDetection)
                {
                    return;
                }
                processingFaceDetection = true;
            }

            //CATransaction.Begin();
            //CATransaction.SetValueForKey(NSObject.FromObject(true), (NSString)(CATransaction.DisableActions.ToString()));



            AVCaptureConnection avcaptureconnection = stillImageOutput.ConnectionFromMediaType(AVMediaType.Video);

            //AVCaptureAutoExposureBracketedStillImageSettings bracketedstillimagesettings = AVCaptureAutoExposureBracketedStillImageSettings.Create(exposureTargetBias: AVCaptureDevice.ExposureTargetBiasCurrent);

            //var settings = new AVCaptureBracketedStillImageSettings[] { bracketedstillimagesettings };


            //stillImageOutput.PrepareToCaptureStillImageBracket(avcaptureconnection,settings, (status,error)=> {
            //    if (error == null) {

            //        stillImageOutput.CaptureStillImageAsynchronously(avcaptureconnection,
            //                                    (CMSampleBuffer imageDataSampleBuffer, NSError nserror) => {
            //                                        if (nserror == null) {
            //                                            using (var sampleBuffer = imageDataSampleBuffer) {

            //                                                if (sampleBuffer != null) {
            //                                                    using (NSData imageData = AVCaptureStillImageOutput.JpegStillToNSData(sampleBuffer)) {
            //                                                        if (imageData != null) {
            //                                                            uIImage = UIImage.LoadFromData(imageData);
            //                                                            /// operater your image
            //                                                            //Console.WriteLine(image);

            //                                                            SetImage(uIImage);



            //                                                        }
            //                                                    }


            //                                                }
            //                                                else {
            //                                                    Console.WriteLine("something was wrong");
            //                                                }
            //                                            }
            //                                        }


            //                                    });
            //    }
            //});

            //CATransaction.Commit();

            //DispatchQueue.MainQueue.DispatchAsync(() => {
            //    CaptureImageWithMetadata(stillImageOutput, avcaptureconnection);
            //});


            //stillImageOutput.CaptureStillImageAsynchronously(avcaptureconnection,
            //(CMSampleBuffer imageDataSampleBuffer, NSError nserror) => {



            //    if (nserror == null) {

            //        //DispatchQueue.GetGlobalQueue(DispatchQueuePriority.Default).DispatchAsync(() =>
            //        //{
            //        DispatchQueue.MainQueue.DispatchAsync(() => {
            //            UIAlertView alert = new UIAlertView();
            //            alert.Show();
            //        });
            //        //});
            //        //DispatchQueue.MainQueue.DispatchAsync(delegate
            //        //{
            //        CIImage image = null;
            //        using (var sampleBuffer = imageDataSampleBuffer) {
            //            NSData imageData = AVCaptureStillImageOutput.JpegStillToNSData(sampleBuffer);
            //            image = CIImage.FromData(imageData);


            //        }



            //         uIImage = image.MakeUIImageFromCIImage();
            //        ivPictureTaken.BackgroundColor = UIColor.Blue;
            //        //ivPictureTaken.Image = uIImage;
            //        //Thread.Sleep(2000);
            //        //processingFaceDetection = false;


            //        //});

            //    }
            //    else {

            //        Console.WriteLine("Something went wrong");
            //    }

            //});
            ivPictureTaken.BackgroundColor = (ivPictureTaken.BackgroundColor == UIColor.Blue)? UIColor.Black : UIColor.Blue;

            await Task.Delay(1000);

            CMSampleBuffer sampleBuffer = await stillImageOutput.CaptureStillImageTaskAsync(avcaptureconnection);

            foreach (var face in faces)
            {
                int faceId = (int)(face as AVMetadataFaceObject).FaceID;
                if (faceViews != null && faceViews.ContainsKey(faceId))
                {
                    var view = faceViews[faceId];
                    view.Frame = CGRect.Empty;
                    view.RemoveFromSuperview();
                }
            }
            teardownAVFoundationFaceDetection();


            CIImage ciImage            = null;
            UIImage uIImage            = null;
            UIImage transformeduIImage = null;

            using (sampleBuffer ) {
                NSData imageData = AVCaptureStillImageOutput.JpegStillToNSData(sampleBuffer);
                arregloJPG = imageData.ToArray();
                ciImage    = CIImage.FromData(imageData);
                uIImage    = new UIImage(imageData);

                CGAffineTransform cGAffineTransform = new CGAffineTransform();

                switch (deviceOrientation)
                {
                case UIDeviceOrientation.Portrait:

                    cGAffineTransform = CGAffineTransform.MakeRotation(DegreesToRadians(0));

                    break;

                case UIDeviceOrientation.PortraitUpsideDown:
                    cGAffineTransform = (CGAffineTransform.MakeRotation(DegreesToRadians(180)));
                    break;

                case UIDeviceOrientation.LandscapeLeft:
                    cGAffineTransform = CGAffineTransform.MakeRotation(DegreesToRadians(90));
                    break;

                case UIDeviceOrientation.LandscapeRight:
                    cGAffineTransform = CGAffineTransform.MakeRotation(DegreesToRadians(-90));
                    //cGAffineTransform.Translate(uIImage.CGImage.Width,0);

                    break;

                case UIDeviceOrientation.FaceUp:
                case UIDeviceOrientation.FaceDown:
                default:
                    break;     // leave the layer in its last known orientation
                }

                var flags = CGBitmapFlags.PremultipliedFirst | CGBitmapFlags.ByteOrder32Little;

                // Create a CGImage on the RGB colorspace from the configured parameter above
                using (var cs = CGColorSpace.CreateDeviceRGB()) {
                    using (CGBitmapContext context = new CGBitmapContext(null, (int)uIImage.CGImage.Width, (int)uIImage.CGImage.Height, uIImage.CGImage.BitsPerComponent, uIImage.CGImage.BytesPerRow, cs, (CGImageAlphaInfo)flags)) {
                        context.ConcatCTM(cGAffineTransform);
                        var cgRect = new CGRect(0, 0, uIImage.CGImage.Width, uIImage.CGImage.Height);
                        context.DrawImage(cgRect, uIImage.CGImage);
                        //ciImage = context.ToImage();

                        using (CGImage cgImage2 = context.ToImage()) {
                            //pixelBuffer.Unlock(CVPixelBufferLock.None);
                            transformeduIImage = UIImage.FromImage(cgImage2);
                            //return UIImage.FromImage(cgImage);
                        }
                    }
                }
            }

            sampleBuffer.Dispose();

            //UIImage uIImage = image2.MakeUIImageFromCIImage();
            NSData nsdata = uIImage.ResizeImageWithAspectRatio(640, 480).AsPNG();

            ivPictureTaken.Image = UIImage.LoadFromData(nsdata);//uIImage;
            //byte[] bytes = nsdata.ToArray();
            //WriteToFile(nsdata);
            //string encoded = Base64.EncodeToString(localdata, Base64Flags.Default);
            //byte[] b = System.IO.File.ReadAllBytes(FileName);


            //string rutaCarpeta = Environment.GetFolderPath(Environment.SpecialFolder.Personal);
            //string resultado = "FotoLAB12";
            //archivoLocal = resultado + ".jpg";
            //ruta = Path.Combine(rutaCarpeta, archivoLocal);
            //File.WriteAllBytes(ruta, arregloJPG);
            //ivPictureTaken.Image= UIImage.FromFile(ruta);
            //DispatchQueue.MainQueue.DispatchAsync(() => {
            //ivPictureTaken.Image = null;
            //InvokeOnMainThread(() => {
            //    ivPictureTaken.BackgroundColor = UIColor.Black;
            //    ivPictureTaken = new UIImageView(uIImage);
            //});

            //ivPictureTaken.SetNeedsDisplay();

            //CATransaction.Commit();

            //});
            //DispatchQueue.GetGlobalQueue(DispatchQueuePriority.Default).DispatchAsync(() =>
            //{
            ProcessingImage(nsdata);
            //});
            //DispatchQueue.GetGlobalQueue(DispatchQueuePriority.Default).DispatchAsync(() => {
            //    //NSNotificationCenter.DefaultCenter.PostNotificationName("OnFaceDetected", uIImage);
            //});
            //session.StopRunning();
            //await Task.Delay(3000);
            //processingFaceDetection = false;
            var a = -1;
        }