private void Window_Loaded(object sender, RoutedEventArgs e) { CursorViewModel.LoadSettings(); CursorViewModel.Create_Task(); Closed += MainWindow_Closed; }
/// <summary> /// This method must be called after CursorViewModel and List of ImageInformationSet are constructed. /// </summary> public void InitializeOnceAtStartup(CursorViewModel cursorViewModel, IList <ImageInformationSet> cursorImageInformationSetList) { Trace.Assert(cursorViewModel != null); Trace.Assert(cursorImageInformationSetList != null); refToCursorViewModel = cursorViewModel; CursorImageInformationSetList = cursorImageInformationSetList; try { imagesDict = new Dictionary <ImageInformation, CursorImageWindowsFormsBitmap>(); foreach (var cursorImageInformationSet in CursorImageInformationSetList) { foreach (var cursorImageInformation in cursorImageInformationSet.ImageInformationList) { imagesDict[cursorImageInformation] = new CursorImageWindowsFormsBitmap(); var fullPath = Path.Combine(cursorImageInformationSet.FolderPath, cursorImageInformation.FileRelativePath); var bmp = (Bitmap)Bitmap.FromFile(fullPath); imagesDict[cursorImageInformation].CursorBitmap = bmp; imagesDict[cursorImageInformation].CursorHBitmapForUiAccessTrue = bmp.GetHbitmap(Color.FromArgb(0)); } } } catch (Exception ex) { if (ApplicationCommonSettings.IsDebugging) { Debugger.Break(); MessageBox.Show(ex.Message); MessageBox.Show("Application cannot find some image resources."); } throw; } setWindowPosition = new Win32SetWindowPosition(this.Handle); refToCursorViewModel.IsVisibleChanged += refToCursorViewModel_IsVisibleChanged; refToCursorViewModel.StateUpdated += refToCursorViewModel_StateUpdated; // TODO: MUSTDO: Update these values when image set is updated. Width = 256; Height = 256; }
private void Window_Closed(object sender, System.EventArgs e) { CursorViewModel.Quit(); }
private void DefaultButton_Click(object sender, RoutedEventArgs e) { CursorViewModel.ResetToDefault(); }
private void Window_Loaded(object sender, RoutedEventArgs e) { CursorViewModel.LoadSettings(); }
public Form1() { InitializeComponent(); // It shows some debugging information. ApplicationCommonSettings.IsDebugging = true; CameraViewImagePictureBox = new PictureBox() { Dock = DockStyle.Fill, SizeMode = PictureBoxSizeMode.CenterImage }; this.Controls.Add(CameraViewImagePictureBox); this.Size = new Size(800, 600); Device = EgsDevice.GetDefaultEgsDevice(); Device.Settings.FaceDetectionMethod.Value = Egs.PropertyTypes.FaceDetectionMethods.DefaultProcessOnEgsDevice; Device.Settings.IsToDetectFaces.Value = true; Device.Settings.IsToDetectHands.Value = true; #if DEBUG Device.Settings.IsToDrawBordersOnCameraViewImageByDevice.Value = true; Device.Settings.CameraViewImageSourceBitmapSize.Value = Egs.PropertyTypes.CameraViewImageSourceBitmapSizes.Size_640x480; #else Device.Settings.IsToDrawBordersOnCameraViewImageByDevice.Value = false; Device.Settings.CameraViewImageSourceBitmapSize.Value = Egs.PropertyTypes.CameraViewImageSourceBitmapSizes.Size_384x240; #endif // CursorForm objects observe CursorViewModel objects in the OnePersonBothHandsViewModel object, and draw the "Gesture Cursor" on desktop. { CursorViewModels = new CursorViewModel[Device.TrackableHandsCountMaximum]; CursorViewModels[0] = new CursorViewModel(); CursorViewModels[1] = new CursorViewModel(); CursorViews = new CursorForm[Device.TrackableHandsCountMaximum]; CursorViews[0] = new CursorForm(); CursorViews[1] = new CursorForm(); var imageSetListRight = new List <ImageInformationSet>(); var imageSetListLeft = new List <ImageInformationSet>(); imageSetListRight.Add(new ImageInformationSet() { ImageSetIndex = 0, FolderPath = "Resources\\", SampleImageFileRelativePath = "Resources\\Sample.png" }); imageSetListRight[0].AddImage((int)CursorImageIndexLabels.OpenHand, "Right_OpenHand.png"); imageSetListRight[0].AddImage((int)CursorImageIndexLabels.CloseHand, "Right_CloseHand.png"); imageSetListLeft.Add(new ImageInformationSet() { ImageSetIndex = 0, FolderPath = "Resources\\", SampleImageFileRelativePath = "Resources\\Sample.png" }); imageSetListLeft[0].AddImage((int)CursorImageIndexLabels.OpenHand, "Left_OpenHand.png"); imageSetListLeft[0].AddImage((int)CursorImageIndexLabels.CloseHand, "Left_CloseHand.png"); CursorViews[0].InitializeOnceAtStartup(CursorViewModels[0], imageSetListRight); CursorViews[1].InitializeOnceAtStartup(CursorViewModels[1], imageSetListLeft); Device.EgsGestureHidReport.ReportUpdated += EgsGestureHidReport_ReportUpdated; } // You can make your original camera view. Device.CameraViewImageSourceBitmapCapture.CameraViewImageSourceBitmapChanged += delegate { if (CameraViewImagePictureBox.Image != null) { CameraViewImagePictureBox.Image.Dispose(); } // Bitmap.Clone() is shallow copy method. var bmp = (System.Drawing.Bitmap)Device.CameraViewImageSourceBitmapCapture.CameraViewImageSourceBitmap.Clone(); using (var g = Graphics.FromImage(bmp)) { if (Device.EgsGestureHidReport.IsStandingBy) { } else if (Device.EgsGestureHidReport.IsFaceDetecting) { g.DrawRectangle(Pens.LightCyan, Device.EgsGestureHidReport.FaceDetectionArea); for (int i = 0; i < Device.EgsGestureHidReport.DetectedFacesCount; i++) { g.DrawRectangle(Pens.LightGreen, Device.EgsGestureHidReport.Faces[i].Area); } if (Device.EgsGestureHidReport.SelectedFaceIndex >= 0) { g.DrawRectangle(Pens.LightYellow, Device.EgsGestureHidReport.Faces[Device.EgsGestureHidReport.SelectedFaceIndex].Area); } foreach (var hand in Device.EgsGestureHidReport.Hands) { g.DrawRectangle(Pens.OrangeRed, hand.DetectionArea); } } else { g.DrawRectangle(Pens.LightYellow, Device.EgsGestureHidReport.Faces[Device.EgsGestureHidReport.SelectedFaceIndex].Area); foreach (var hand in Device.EgsGestureHidReport.Hands) { g.DrawRectangle(Pens.OrangeRed, hand.ScreenMappedArea); int ellipseRadius = hand.IsTouching ? 5 : 10; g.DrawEllipse(Pens.OrangeRed, (int)hand.XInCameraViewImage - ellipseRadius, (int)hand.YInCameraViewImage - ellipseRadius, ellipseRadius * 2, ellipseRadius * 2); } } } CameraViewImagePictureBox.Image = bmp; }; this.FormClosed += (sender, e) => { // If you do not detach this event handler, exceptions can happen. Device.EgsGestureHidReport.ReportUpdated -= EgsGestureHidReport_ReportUpdated; // When the application quits, please stop face detection and hand detection. Device.Settings.IsToDetectFaces.Value = false; Device.Settings.IsToDetectHands.Value = false; Device.Settings.IsToDrawBordersOnCameraViewImageByDevice.Value = false; EgsDevice.CloseDefaultEgsDevice(); CameraViewImagePictureBox.Dispose(); foreach (var cursorView in CursorViews) { cursorView.Close(); } }; }
public FixedHandDetectionAreasExample01App() : base() { Egs.BindableResources.Current.CultureChanged += delegate { ApplicationCommonSettings.HostApplicationName = "FixedHandDetectionAreasExample01"; }; Egs.BindableResources.Current.ChangeCulture(""); if (DuplicatedProcessStartBlocking.TryGetMutexOnTheBeginningOfApplicationConstructor() == false) { Application.Current.Shutdown(); return; } Device = EgsDevice.GetDefaultEgsDevice(); Device.Settings.IsToDrawBordersOnCameraViewImageByDevice.Value = true; Device.Settings.IsToDetectFaces.Value = true; Device.Settings.IsToDetectHands.Value = true; Device.Settings.IsToFixHandDetectionRegions.Value = true; Device.Settings.CameraViewImageSourceBitmapSize.Value = Egs.PropertyTypes.CameraViewImageSourceBitmapSizes.Size_640x480; { CursorViewModels = new CursorViewModel[Device.TrackableHandsCountMaximum]; CursorViewModels[0] = new CursorViewModel(); CursorViewModels[1] = new CursorViewModel(); CursorViews = new CursorForm[Device.TrackableHandsCountMaximum]; CursorViews[0] = new CursorForm(); CursorViews[1] = new CursorForm(); var imageSetListRight = new List <ImageInformationSet>(); var imageSetListLeft = new List <ImageInformationSet>(); imageSetListRight.Add(new ImageInformationSet() { ImageSetIndex = 0, FolderPath = "Resources\\", SampleImageFileRelativePath = "Resources\\Sample.png" }); imageSetListRight[0].AddImage((int)CursorImageIndexLabels.OpenHand, "Right_OpenHand.png"); imageSetListRight[0].AddImage((int)CursorImageIndexLabels.CloseHand, "Right_CloseHand.png"); imageSetListLeft.Add(new ImageInformationSet() { ImageSetIndex = 0, FolderPath = "Resources\\", SampleImageFileRelativePath = "Resources\\Sample.png" }); imageSetListLeft[0].AddImage((int)CursorImageIndexLabels.OpenHand, "Left_OpenHand.png"); imageSetListLeft[0].AddImage((int)CursorImageIndexLabels.CloseHand, "Left_CloseHand.png"); CursorViews[0].InitializeOnceAtStartup(CursorViewModels[0], imageSetListRight); CursorViews[1].InitializeOnceAtStartup(CursorViewModels[1], imageSetListLeft); Device.EgsGestureHidReport.ReportUpdated += EgsGestureHidReport_ReportUpdated; CameraViewBackgroundWindowModel = new CameraViewModel(); CameraViewBackgroundWindow = new FixedHandDetectionAreasExample01MainWindow(); CameraViewBackgroundWindowModel.InitializeOnceAtStartup(Device); Device.CameraViewImageSourceBitmapCapture.CameraViewImageSourceBitmapChanged += delegate { // Unfortunately, DataBinding does not seem to be able to solve "different thread" InvalidOperationException. CameraViewBackgroundWindow.CameraViewImage.Dispatcher.InvokeAsync(() => { CameraViewBackgroundWindow.CameraViewImage.Source = CameraViewBackgroundWindowModel.CameraViewWpfBitmapSource; }); }; CameraViewBackgroundWindow.KeyDown += (sender, e) => { switch (e.Key) { case System.Windows.Input.Key.Escape: CameraViewBackgroundWindow.Close(); break; } }; base.MainWindow = CameraViewBackgroundWindow; CameraViewBackgroundWindow.Show(); } InitializeFaceDetection(); }
private void MainWindow_Closed(object sender, System.EventArgs e) { CursorViewModel.StopData(); }
private void Window_Loaded(object sender, RoutedEventArgs e) { KinectReader.window = this; CursorViewModel.LoadSettings(); }