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;
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 => Panel.GetZIndex(x))
.Max();
Panel.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;
}
}
catch (Exception ex)
{
MessageWindow.Show(ex.Message);
}
}
public void RectRightUp_DragDelta(object sender, DragDeltaEventArgs e)
{
try
{
if (_mouseDown)
{
Thumb thu = (Thumb)sender;
double imgW;
double imgH;
double imgX;
double imgY;
switch (thu.Name)
{
case "RectLeftUp":
#region 左上
imgW = _imgRightDown.X - (Mouse.GetPosition(_gridM).X);
imgH = _imgRightDown.Y - (Mouse.GetPosition(_gridM).Y);
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);
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;
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;
}
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 图片拉伸移动
}
}