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