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); }
//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(); }
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; }