private void AdornerOnMouseMove(object sender, MouseEventArgs e)
        {
            var point       = e.GetPosition(_canvas);
            var newPosition = _currentToolState.OnMouseMove(point);

            if (newPosition.HasValue)
            {
                _cropTool.Redraw(newPosition.Value.Left, newPosition.Value.Top, (int)newPosition.Value.Width, (int)newPosition.Value.Height);
            }
        }
        private void BottomRight_DragDelta(object sender, DragDeltaEventArgs e)
        {
            ThumbCrop thumb = sender as ThumbCrop;

            double resultThumbLeft = Canvas.GetLeft(thumb) + e.HorizontalChange;

            if (resultThumbLeft > _canvas.ActualWidth)
            {
                resultThumbLeft = _canvas.ActualWidth;
            }

            double thumbResultTop = Canvas.GetTop(thumb) + e.VerticalChange;

            if (thumbResultTop + _thumbSize / 2 > _canvas.ActualHeight)
            {
                thumbResultTop = _canvas.ActualHeight - _thumbSize / 2;
            }

            double resultHeight = thumbResultTop - _cropTool.TopLeftY + _thumbSize / 2;
            double resultWidth  = resultThumbLeft - _cropTool.TopLeftX;

            if (!_KeepRatio || _Ratio == 0)
            {
                _cropTool.Redraw(_cropTool.TopLeftX, _cropTool.TopLeftY, resultWidth, resultHeight);
            }
            else
            {
                ResizeWithKeepRatio(_cropTool.TopLeftX, _cropTool.TopLeftY, resultWidth, resultHeight);
            }
        }
Exemple #3
0
        public CropService(FrameworkElement adornedElement)
        {
            _adornedElement = adornedElement;
            _canvas         = new Canvas
            {
                Height = adornedElement.ActualHeight,
                Width  = adornedElement.ActualWidth
            };
            _cropAdorner = new CropAdorner(adornedElement, _canvas);
            var adornerLayer = AdornerLayer.GetAdornerLayer(adornedElement);

            Debug.Assert(adornerLayer != null, nameof(adornerLayer) + " != null");
            adornerLayer.Add(_cropAdorner);

            _cropTool = new CropTool(_canvas);
            _cropTool.CroppedAreaChangedEvent += OnCroppedAreaChanged;
            _createState      = new CreateState(_cropTool, _canvas);
            _completeState    = new CompleteState();
            _dragState        = new DragState(_cropTool, _canvas);
            _currentToolState = _completeState;

            _cropAdorner.MouseLeftButtonDown += AdornerOnMouseLeftButtonDown;
            _cropAdorner.MouseMove           += AdornerOnMouseMove;
            _cropAdorner.MouseLeftButtonUp   += AdornerOnMouseLeftButtonUp;

            _cropTool.Redraw(0, 0, 0, 0);
        }
        public CropService(FrameworkElement adornedElement, bool squareSelection)
        {
            //Hack: added by thr
            _squareSelection = squareSelection;

            _canvas = new Canvas
            {
                Height = adornedElement.ActualHeight,
                Width  = adornedElement.ActualWidth
            };
            _cropAdorner = new CropAdorner(adornedElement, _canvas);
            var adornerLayer = AdornerLayer.GetAdornerLayer(adornedElement);

            Debug.Assert(adornerLayer != null, nameof(adornerLayer) + " != null");
            adornerLayer.Add(_cropAdorner);

            var cropShape = new CropShape(
                new Rectangle
            {
                Height          = 0,
                Width           = 0,
                Stroke          = Brushes.Black,
                StrokeThickness = 1.5
            },
                new Rectangle
            {
                Stroke          = Brushes.White,
                StrokeDashArray = new DoubleCollection(new double[] { 4, 4 })
            }
                );

            _cropTool         = new CropTool(_canvas, _squareSelection);
            _createState      = new CreateState(_cropTool, _canvas);
            _completeState    = new CompleteState();
            _dragState        = new DragState(_cropTool, _canvas);
            _currentToolState = _completeState;

            _cropAdorner.MouseLeftButtonDown += AdornerOnMouseLeftButtonDown;
            _cropAdorner.MouseMove           += AdornerOnMouseMove;
            _cropAdorner.MouseLeftButtonUp   += AdornerOnMouseLeftButtonUp;

            _cropTool.Redraw(0, 0, 0, 0);
        }
Exemple #5
0
 /// <summary>
 /// 重新设置裁切框位置与大小
 /// </summary>
 /// <param name="left">裁切框左上角位置横坐标</param>
 /// <param name="top">裁切框左上角位置纵坐标</param>
 /// <param name="width">裁切框宽度</param>
 /// <param name="height">裁切框高度</param>
 public void SetCropArea(double left, double top, double width, double height)
 {
     _cropTool.Redraw(left, top, width, height);
 }