private void SynchronizeRegion(SynchronizeRegions sr) { if (sr.PresenterID != ViewModelID) { if (sr.Zoom != -1) { Scale = sr.Zoom; } RegionWidth = sr.Width; RegionHeight = sr.Height; int top = (int)sr.Position.Top; int left = (int)sr.Position.Left; RegionLocation = new Thickness(left, top, 0, 0); if (sr.DoProcessing) { CreateRegion cr = new CreateRegion(); Dictionary <String, Object> parameters = new Dictionary <string, object>(); parameters.Add("RegionLocation", new Point(RegionLocation.Left, RegionLocation.Top)); parameters.Add("RegionWidth", RegionWidth); parameters.Add("RegionHeight", RegionHeight); parameters.Add("BitmapSource", ImageSource); parameters.Add("ImagePosition", ImagePosition); parameters.Add("PresenterID", ViewModelID); parameters.Add("Scale", Scale); cr.AffectImage(parameters); } } }
private void MouseLeftClick(System.Windows.RoutedEventArgs args) { _mouseClickPosition.X = _mouseX; _mouseClickPosition.Y = _mouseY; switch (ToolType) { case Tools.None: break; case Tools.RegionSelection: { RegionLocation = new Thickness(_mouseX, _mouseY, 0, 0); RegionWidth = 0; RegionHeight = 0; _isDragged = true; if (IsSynchronized) { SynchronizeRegions sr = new SynchronizeRegions(); sr.PresenterID = ViewModelID; sr.Position = RegionLocation; sr.Width = RegionWidth; sr.Height = RegionHeight; sr.DoProcessing = false; _aggregator.GetEvent <SynchronizeRegions>().Publish(sr); } } break; case Tools.Magnifier: break; case Tools.PixelInformations: break; case Tools.RegionTransformation: break; case Tools.ImagePan: { _isDragged = true; _mouseXDelta = 0; _mouseYDelta = 0; } break; default: break; } return; }
private void MouseMove(RoutedEventArgs args) { if (DisplayedImage == null) { return; } if (!_escapeClicked) { if (_isDragged) { switch (ToolType) { case Tools.None: break; case Tools.RegionSelection: { RegionWidth = _mouseX - (int)_mouseClickPosition.X; int x = (int)RegionLocation.Left, y = (int)RegionLocation.Top; if (RegionWidth < 0) { RegionWidth = Math.Abs(RegionWidth); x = _mouseX; } RegionHeight = _mouseY - (int)_mouseClickPosition.Y; if (RegionHeight < 0) { RegionHeight = Math.Abs(RegionHeight); y = _mouseY; } RegionLocation = new Thickness(x, y, 0, 0); if (IsSynchronized) { SynchronizeRegions sr = new SynchronizeRegions(); sr.PresenterID = ViewModelID; sr.Position = RegionLocation; sr.Width = RegionWidth; sr.Height = RegionHeight; sr.DoProcessing = false; _aggregator.GetEvent <SynchronizeRegions>().Publish(sr); } } break; case Tools.PixelInformations: break; case Tools.RegionTransformation: break; case Tools.ImagePan: { App.Current.Dispatcher.Invoke(new Action(() => { Dictionary <String, Object> parameters = new Dictionary <string, object>(); parameters.Add("MouseClickPosition", _mouseClickPosition); parameters.Add("MouseX", MouseX); parameters.Add("MouseY", MouseY); parameters.Add("MouseXDelta", _mouseXDelta); parameters.Add("MouseYDelta", _mouseYDelta); parameters.Add("DisplayedImage", DisplayedImage); parameters.Add("Position", ImagePosition); parameters.Add("PresenterID", ViewModelID); parameters.Add("IsSynchronized", IsSynchronized); parameters.Add("DoProcessing", false); Tool.AffectImage(parameters); _mouseXDelta = _mouseX - (int)_mouseClickPosition.X; _mouseYDelta = _mouseY - (int)_mouseClickPosition.Y; _isDragged = true; } )); } break; default: break; } } } }
public ImagePresenterViewModel(ObservableCollection <Image> image, int viewModelID, Tools tool, int maxWindows) { switch (tool) { case Tools.None: break; case Tools.RegionSelection: Tool = new CreateRegion(); break; case Tools.PixelInformations: Tool = new PixelPicker(); break; case Tools.RegionTransformation: break; case Tools.ImagePan: Tool = new PanImage(); break; case Tools.Rotate: Tool = new Rotate(); break; default: break; } ViewModelID = viewModelID; MaxWindows = maxWindows; _imageList = new ObservableCollection <Image>(); _imageList = image; ImageIndex = 0; DisplayedImage = _imageList[_imageIndex]; IsSynchronized = true; Scale = 1; SubscriptionToken token; token = _aggregator.GetEvent <SerializeOutputEvent>().Subscribe(SerializeOutputFromPresenters); _subscriptionTokens.Add(typeof(SerializeOutputEvent), token); token = _aggregator.GetEvent <RotateImageEvent>().Subscribe(RotateImage); _subscriptionTokens.Add(typeof(RotateImageEvent), token); token = _aggregator.GetEvent <SynchronizationEvent>().Subscribe(i => { if (ViewModelID == i) { IsSynchronized = !IsSynchronized; } }); _subscriptionTokens.Add(typeof(SynchronizationEvent), token); token = _aggregator.GetEvent <SendDisplayedImage>().Subscribe(item => { if ((item.PresenterID == ViewModelID || (item.DoReset == true && item.IsSynchronized && IsSynchronized)) && item.Image != null) { ImagePosition = item.Image.Position; } else if (item.IsSynchronized == true && IsSynchronized && item.DoReset == false) { ImagePosition = new Thickness(ImagePosition.Left + item.OffsetX, ImagePosition.Top + item.OffsetY, -(ImagePosition.Left + item.OffsetX), -(ImagePosition.Top + item.OffsetY)); } if (item.DoProcessing) { CalculateRegionProperties(); } }); _subscriptionTokens.Add(typeof(SendDisplayedImage), token); token = _aggregator.GetEvent <SendToolEvent>().Subscribe(item => { Tool = item; }); _subscriptionTokens.Add(typeof(SendToolEvent), token); token = _aggregator.GetEvent <SendRegionNameEvent>().Subscribe(SaveRegion); _subscriptionTokens.Add(typeof(SendRegionNameEvent), token); token = _aggregator.GetEvent <LoadRegionEvent>().Subscribe(region => { if (region.PresenterID > MaxWindows) { region.PresenterID = DisplayImageWindowViewModel.ImageCounter; } if (region.PresenterID != ViewModelID) { return; } if (_imageList != region.ImageList) { _imageList = region.ImageList; } DisplayedImage = region.ImageList.First(x => x == region.AttachedImage); RegionLocation = new Thickness(region.Position.X * 96.0 / region.DpiX, region.Position.Y * 96.0 / region.DpiY, 0, 0); RegionWidth = (int)(region.Size.Width * 96.0 / region.DpiX); RegionHeight = (int)(region.Size.Height * 96.0 / region.DpiY); ImageIndex = region.ImageIndex; Scale = region.Zoom; ImagePosition = region.ImagePosition; if (IsSynchronized) { SynchronizeRegions sr = new SynchronizeRegions(); sr.PresenterID = ViewModelID; sr.Position = RegionLocation; sr.Width = RegionWidth; sr.Height = RegionHeight; sr.DoProcessing = true; sr.Zoom = Scale; _aggregator.GetEvent <SynchronizeRegions>().Publish(sr); } CalculateRegionProperties(); }); _subscriptionTokens.Add(typeof(LoadRegionEvent), token); token = _aggregator.GetEvent <SendImageList>().Subscribe(item => { try { if (item.Count != 0) { if (!item.Any(x => x == _imageList)) { _imageList = item[0]; ImageIndex = 0; DisplayedImage = _imageList[0]; } } else { DisplayedImage = null; _imageList = null; } } catch (Exception) { } }); _subscriptionTokens.Add(typeof(SendImageList), token); token = _aggregator.GetEvent <ResetRegionsEvent>().Subscribe(() => { RegionHeight = 0; RegionWidth = 0; RegionLocation = new Thickness(0, 0, 0, 0); }); _subscriptionTokens.Add(typeof(ResetRegionsEvent), token); ImageClickCommand = new GalaSoft.MvvmLight.Command.RelayCommand <RoutedEventArgs>(ImageClickExecute); LeftArrowCommand = new RelayCommand(PreviousImage); RightArrowCommand = new RelayCommand(NextImage); SaveRegionCommand = new RelayCommand(OpenSaveRegionWindow); SerializeOutputFromListCommand = new RelayCommand(SerializeOutputFromList); EscapeCommand = new RelayCommand(EscapeClicked); SelectAllCommand = new RelayCommand(SelectAll); ResetPositionCommand = new RelayCommand(ResetPosition); ResetZoomCommand = new RelayCommand(ResetZoom); MouseLeftClickCommand = new GalaSoft.MvvmLight.Command.RelayCommand <RoutedEventArgs>(MouseLeftClick); MouseMoveCommand = new GalaSoft.MvvmLight.Command.RelayCommand <RoutedEventArgs>(MouseMove); MouseOverCommand = new GalaSoft.MvvmLight.Command.RelayCommand <RoutedEventArgs>(MouseEnter); MouseWheelCommand = new GalaSoft.MvvmLight.Command.RelayCommand <MouseWheelEventArgs>(MouseWheel); Filter_BrightnessCommand = new RelayCommand(FilterChoose); Filter_ContrastCommand = new RelayCommand(FilterChoose); Filter_GreyScaleCommand = new RelayCommand(FilterChoose); Filter_NegativeCommand = new RelayCommand(FilterChoose); Filter_SepiaCommand = new RelayCommand(FilterChoose); Filter_ResetCommand = new RelayCommand(FilterChoose); }
private void ImageClickExecute(System.Windows.RoutedEventArgs args) { if (DisplayedImage == null) { return; } if (!_escapeClicked) { if (_tool != null) { App.Current.Dispatcher.Invoke(new Action(() => { Dictionary <String, Object> parameters = new Dictionary <string, object>(); switch (Tool.GetToolEnum()) { case Tools.None: break; case Tools.RegionSelection: { parameters.Add("RegionLocation", new Point(RegionLocation.Left, RegionLocation.Top)); parameters.Add("RegionWidth", RegionWidth); parameters.Add("RegionHeight", RegionHeight); parameters.Add("BitmapSource", ImageSource); parameters.Add("ImagePosition", ImagePosition); parameters.Add("PresenterID", ViewModelID); parameters.Add("Scale", Scale); if (IsSynchronized) { SynchronizeRegions sr = new SynchronizeRegions(); sr.PresenterID = ViewModelID; sr.Position = RegionLocation; sr.Width = RegionWidth; sr.Height = RegionHeight; sr.DoProcessing = true; _aggregator.GetEvent <SynchronizeRegions>().Publish(sr); } } break; case Tools.PixelInformations: { PixelInformationView piv = new PixelInformationView(); piv.Show(); _aggregator.GetEvent <SendPixelInformationViewEvent>().Publish(piv); parameters.Add("MouseX", MouseX); parameters.Add("MouseY", MouseY); parameters.Add("Scale", Scale); parameters.Add("BitmapSource", ImageSource); parameters.Add("ImagePosition", ImagePosition); } break; case Tools.RegionTransformation: break; case Tools.ImagePan: { parameters.Add("MouseClickPosition", _mouseClickPosition); parameters.Add("MouseX", MouseX); parameters.Add("MouseY", MouseY); parameters.Add("MouseXDelta", _mouseXDelta); parameters.Add("MouseYDelta", _mouseYDelta); parameters.Add("DisplayedImage", DisplayedImage); parameters.Add("Position", ImagePosition); parameters.Add("PresenterID", ViewModelID); parameters.Add("IsSynchronized", IsSynchronized); parameters.Add("DoProcessing", true); } break; case Tools.Rotate: { List <int> presenters = new List <int>(); parameters.Add("DisplayedImage", DisplayedImage); parameters.Add("PresenterID", ViewModelID); parameters.Add("SynchronizedPresenters", presenters); parameters.Add("Angle", 90); } break; default: return; } try { _tool.AffectImage(parameters); if (ToolType == Tools.ImagePan) { CalculateRegionProperties(); } } catch (Exception e) { throw e; } })); } } else { _escapeClicked = false; } _isDragged = false; }