using System; using System.Drawing; using System.Linq; using System.Windows; using System.Windows.Controls; using System.Windows.Controls.Primitives; using System.Windows.Input; using System.Windows.Media; namespace XHWK.WKTool.Utils { internal class ImageOperationUtil { #region 图片拉伸移动 private System.Windows.Point initialPoint; private Thumb RectLeftUp; private Thumb RectRightUp; private Thumb RectLeftDown; private Thumb RectRightDown; private System.Windows.Shapes.Rectangle RectImgBorder; private System.Windows.Controls.Image imgCanvas; private Grid GridM; private bool mouseDown = false; public void setMouseDown(bool mouseDown) { this.mouseDown = mouseDown; } public ImageOperationUtil( Thumb RectLeftUp, Thumb RectRightUp, Thumb RectLeftDown, Thumb RectRightDown, System.Windows.Shapes.Rectangle RectImgBorder, System.Windows.Controls.Image imgCanvas, Grid GridM ) { this.RectLeftUp = RectLeftUp; this.RectRightUp = RectRightUp; this.RectLeftDown = RectLeftDown; this.RectRightDown = RectRightDown; this.RectImgBorder = RectImgBorder; this.imgCanvas = imgCanvas; this.GridM = GridM; } /// /// 隐藏图片四个点和线 /// public void HideAngleBorder() { RectLeftUp.Visibility = Visibility.Hidden; RectRightUp.Visibility = Visibility.Hidden; RectLeftDown.Visibility = Visibility.Hidden; RectRightDown.Visibility = Visibility.Hidden; RectImgBorder.Visibility = Visibility.Hidden; } private void ShowAngleBorder() { PointLocation(); RectLeftUp.Visibility = Visibility.Visible; RectRightUp.Visibility = Visibility.Visible; RectLeftDown.Visibility = Visibility.Visible; RectRightDown.Visibility = Visibility.Visible; RectImgBorder.Visibility = Visibility.Visible; } /// /// 确定四个点和边框的位置大小 /// private void PointLocation() { RectImgBorder.Width = imgCanvas.ActualWidth + 10.0; RectImgBorder.Height = imgCanvas.ActualHeight + 10.0; RectImgBorder.Margin = new Thickness(imgCanvas.Margin.Left - 5.0, imgCanvas.Margin.Top - 5.0, 0, 0); Canvas.SetLeft(RectLeftUp, imgCanvas.Margin.Left - 10.0); Canvas.SetTop(RectLeftUp, imgCanvas.Margin.Top - 10.0); Canvas.SetLeft(RectRightUp, imgCanvas.Margin.Left + imgCanvas.ActualWidth - 10.0); Canvas.SetTop(RectRightUp, imgCanvas.Margin.Top - 10.0); Canvas.SetLeft(RectLeftDown, imgCanvas.Margin.Left - 10.0); Canvas.SetTop(RectLeftDown, imgCanvas.Margin.Top + imgCanvas.ActualHeight - 10.0); Canvas.SetLeft(RectRightDown, imgCanvas.Margin.Left + imgCanvas.ActualWidth - 10.0); Canvas.SetTop(RectRightDown, imgCanvas.Margin.Top + imgCanvas.ActualHeight - 10.0); } public void PicEMap_MouseDown(object sender, MouseButtonEventArgs e) { System.Windows.Point point = e.GetPosition(imgCanvas); initialPoint = point; HideAngleBorder(); } public void imgCanvas_MouseMove(object sender, MouseEventArgs e) { if (e.LeftButton == MouseButtonState.Pressed && mouseDown) { System.Windows.Point point = e.GetPosition(imgCanvas); imgCanvas.Margin = new Thickness(imgCanvas.Margin.Left + (point.X - initialPoint.X), imgCanvas.Margin.Top + (point.Y - initialPoint.Y), 0, 0); App.PageDrawList[App.PageContextData.currpage - 1].ImageLocation = new TranslateTransform { X = imgCanvas.Margin.Left, Y = imgCanvas.Margin.Top }; App.PageDrawList[App.PageContextData.currpage - 1].ImageSizes = new ScaleTransform { CenterX = imgCanvas.ActualWidth, CenterY = imgCanvas.ActualHeight }; App.PageDrawList[App.PageContextData.currpage - 1].IsImageLocation = false; } } public void imgCanvas_MouseUp() { if (mouseDown) { ShowAngleBorder(); } } private PointF imgRightDown; /// /// 设置控件最上层 /// /// /// public void BringToFront(Thumb element)//图片置于最顶层显示 { if (element == null) { return; } Canvas parent = element.Parent as Canvas; if (parent == null) { return; } int maxZ = parent.Children.OfType()//linq语句,取Zindex的最大值 .Where(x => x != element) .Select(x => Canvas.GetZIndex(x)) .Max(); Canvas.SetZIndex(element, maxZ + 1); } public void RectRightUp_DragStarted(object sender, System.Windows.Controls.Primitives.DragStartedEventArgs e) { try { Thumb thu = (Thumb)sender; BringToFront(thu); imgRightDown = new System.Drawing.PointF((float)(imgCanvas.Margin.Left + imgCanvas.ActualWidth), (float)(imgCanvas.Margin.Top + imgCanvas.ActualHeight)); HideAngleBorder(); switch (thu.Name) { case "RectLeftUp": RectLeftUp.Visibility = Visibility.Visible; break; case "RectRightUp": RectRightUp.Visibility = Visibility.Visible; break; case "RectLeftDown": RectLeftDown.Visibility = Visibility.Visible; break; case "RectRightDown": RectRightDown.Visibility = Visibility.Visible; break; default: break; } } catch (Exception ex) { MessageWindow.Show(ex.Message); } } public void RectRightUp_DragDelta(object sender, DragDeltaEventArgs e) { try { if (mouseDown) { Thumb thu = (Thumb)sender; #region 判断是否超出 暂无 double plul = Canvas.GetLeft(RectLeftUp); double plut = Canvas.GetTop(RectLeftUp); double prdl = Canvas.GetLeft(RectRightDown); double prdt = Canvas.GetTop(RectRightDown); #endregion 判断是否超出 暂无 double imgW = 0; double imgH = 0; double imgX = 0; double imgY = 0; switch (thu.Name) { case "RectLeftUp": #region 左上 imgW = imgRightDown.X - (Mouse.GetPosition(GridM).X); imgH = imgRightDown.Y - (Mouse.GetPosition(GridM).Y); imgX = 0; imgY = 0; if (imgW < 50) { imgCanvas.Width = 50; imgX = imgCanvas.Margin.Left; Canvas.SetLeft(thu, Canvas.GetLeft(RectRightDown) - 50); } else { imgCanvas.Width = imgW; imgX = Mouse.GetPosition(GridM).X; Canvas.SetLeft(thu, Canvas.GetLeft(thu) + e.HorizontalChange); } if (imgH < 50) { imgCanvas.Height = 50; imgY = imgCanvas.Margin.Top; Canvas.SetTop(thu, Canvas.GetTop(RectRightDown) - 50); } else { imgCanvas.Height = imgH; imgY = Mouse.GetPosition(GridM).Y; Canvas.SetTop(thu, Canvas.GetTop(thu) + e.VerticalChange); } imgCanvas.Margin = new Thickness(imgX, imgY, 0, 0); #endregion 左上 break; case "RectRightUp": #region 右上 imgW = Mouse.GetPosition(GridM).X - imgCanvas.Margin.Left; imgH = imgRightDown.Y - (Mouse.GetPosition(GridM).Y); imgX = 0; imgY = 0; if (imgW < 50) { imgCanvas.Width = 50; imgX = imgCanvas.Margin.Left; Canvas.SetLeft(thu, Canvas.GetLeft(RectLeftUp) + 50); } else { imgCanvas.Width = imgW; imgX = imgCanvas.Margin.Left; Canvas.SetLeft(thu, Canvas.GetLeft(thu) + e.HorizontalChange); } if (imgH < 50) { imgCanvas.Height = 50; imgY = imgCanvas.Margin.Top; Canvas.SetTop(thu, Canvas.GetTop(RectRightDown) - 50); } else { imgCanvas.Height = imgH; imgY = Mouse.GetPosition(GridM).Y; Canvas.SetTop(thu, Canvas.GetTop(thu) + e.VerticalChange); } imgCanvas.Margin = new Thickness(imgX, imgY, 0, 0); #endregion 右上 break; case "RectLeftDown": #region 左下 imgW = imgRightDown.X - (Mouse.GetPosition(GridM).X); imgH = Mouse.GetPosition(GridM).Y - imgCanvas.Margin.Top; imgX = 0; imgY = 0; if (imgW < 50) { imgCanvas.Width = 50; imgX = imgCanvas.Margin.Left; Canvas.SetLeft(thu, Canvas.GetLeft(RectRightDown) - 50); } else { imgCanvas.Width = imgW; imgX = Mouse.GetPosition(GridM).X; Canvas.SetLeft(thu, Canvas.GetLeft(thu) + e.HorizontalChange); } if (imgH < 50) { imgCanvas.Height = 50; imgY = imgCanvas.Margin.Top; Canvas.SetTop(thu, Canvas.GetTop(RectLeftUp) + 50); } else { imgCanvas.Height = imgH; imgY = imgCanvas.Margin.Top; Canvas.SetTop(thu, Canvas.GetTop(thu) + e.VerticalChange); } imgCanvas.Margin = new Thickness(imgX, imgY, 0, 0); //imgCanvas.Width = imgRightDown.X - (Mouse.GetPosition(GridM).X); //imgCanvas.Height = Mouse.GetPosition(GridM).Y - imgCanvas.Margin.Top; //imgCanvas.Margin = new Thickness(Mouse.GetPosition(GridM).X, imgCanvas.Margin.Top, 0, 0); #endregion 左下 break; case "RectRightDown": #region 右下 imgW = Mouse.GetPosition(GridM).X - imgCanvas.Margin.Left; imgH = Mouse.GetPosition(GridM).Y - imgCanvas.Margin.Top; if (imgW < 50) { imgCanvas.Width = 50; Canvas.SetLeft(thu, Canvas.GetLeft(RectLeftUp) + 50); } else { imgCanvas.Width = imgW; Canvas.SetLeft(thu, Canvas.GetLeft(thu) + e.HorizontalChange); } if (imgH < 50) { imgCanvas.Height = 50; Canvas.SetTop(thu, Canvas.GetTop(RectLeftUp) + 50); } else { imgCanvas.Height = imgH; Canvas.SetTop(thu, Canvas.GetTop(thu) + e.VerticalChange); } //imgCanvas.Margin = new Thickness(imgX, imgY, 0, 0); //imgCanvas.Width += e.HorizontalChange; //imgCanvas.Height += e.VerticalChange; #endregion 右下 break; default: break; } App.PageDrawList[App.PageContextData.currpage - 1].ImageLocation = new TranslateTransform { X = imgCanvas.Margin.Left, Y = imgCanvas.Margin.Top }; App.PageDrawList[App.PageContextData.currpage - 1].ImageSizes = new ScaleTransform { CenterX = imgCanvas.ActualWidth, CenterY = imgCanvas.ActualHeight }; App.PageDrawList[App.PageContextData.currpage - 1].IsImageLocation = false; } } catch (Exception) { MessageWindow.Show("图片过小!"); } } public void RectRightUp_DragCompleted() { ShowAngleBorder(); } /// /// 点击标题栏 隐藏截图的四个点和线 /// /// /// /// /// public void Grid_MouseDown() { HideAngleBorder(); } /// /// 鼠标左键点击事件 /// /// /// /// /// public void Window_MouseLeftButtonDown_1() { if (RectImgBorder.Visibility != Visibility.Hidden) { HideAngleBorder(); } } #endregion 图片拉伸移动 } }