コード例 #1
0
        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);
                }
            }
        }
コード例 #2
0
        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;
        }
コード例 #3
0
        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;
                    }
                }
            }
        }
コード例 #4
0
        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);
        }
コード例 #5
0
        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;
        }