using System;
|
using System.Windows;
|
using System.Windows.Controls;
|
using System.Windows.Input;
|
using System.Windows.Media;
|
using System.Windows.Media.Imaging;
|
using XHandler.Class;
|
|
namespace XHandler.View.BacteriaPickResult
|
{
|
/// <summary>
|
/// 挑菌结果图片预览页面
|
/// </summary>
|
public partial class ImagePreview : UserControl
|
{
|
public event EventHandler closeEvent;
|
|
private bool _startMove;
|
// private int i;
|
private Point start;
|
public ImagePreview(string imgPath)
|
{
|
InitializeComponent();
|
Img.Source = BitmapFrame.Create(new Uri(imgPath), BitmapCreateOptions.None, BitmapCacheOption.OnLoad);
|
}
|
|
private void UserControl_Loaded(object sender, RoutedEventArgs e)
|
{
|
double zoom = Math.Min(Sv.ViewportWidth / Img.Source.Width, Sv.ViewportHeight / Img.Source.Height);
|
Matrix matrix = new Matrix();
|
matrix.M11 = zoom;
|
matrix.M22 = zoom;
|
matrix.OffsetX = (Sv.ViewportWidth - Sv.ViewportHeight) / 2;
|
((MatrixTransform)viewBox.RenderTransform).Matrix = matrix;
|
|
}
|
|
private void Button_Click(object sender, RoutedEventArgs e)
|
{
|
if (EventResponseController.Instance.CanExecute() == false)
|
return;
|
closeEvent?.Invoke(this, EventArgs.Empty);
|
}
|
|
private void ChangSize(bool big, FrameworkElement ctrl, double centerX, double centerY)
|
{
|
var m = ((MatrixTransform)ctrl.RenderTransform).Matrix;
|
if (big)
|
{
|
m.ScaleAtPrepend(1.1, 1.1, centerX, centerY);
|
}
|
else
|
{
|
m.ScaleAtPrepend(1 / 1.1, 1 / 1.1, centerX, centerY);
|
}
|
ctrl.RenderTransform = new MatrixTransform(m);
|
}
|
|
private void Box_OnMouseWheel(object sender, MouseWheelEventArgs e)
|
{
|
var centerPt = e.GetPosition(viewBox);
|
ChangSize(e.Delta > 0, viewBox, centerPt.X, centerPt.Y);
|
}
|
|
private void Box_OnPreviewMouseLeftButtonDown(object sender, MouseButtonEventArgs e)
|
{
|
if (viewBox.IsMouseCaptured) return;
|
viewBox.CaptureMouse();
|
start = e.MouseDevice.GetPosition(Sv);
|
e.Handled = true;
|
_startMove = true;
|
}
|
|
private void Box_OnPreviewMouseLeftButtonUp(object sender, MouseButtonEventArgs e)
|
{
|
viewBox.ReleaseMouseCapture();
|
_startMove = false;
|
}
|
|
private void Box_OnPreviewMouseMove(object sender, MouseEventArgs e)
|
{
|
if (!viewBox.IsMouseCaptured || !_startMove) return;
|
var point = e.MouseDevice.GetPosition(Sv);
|
var m = viewBox.RenderTransform.Value;
|
//计算x偏移量
|
m.OffsetX = m.OffsetX + point.X - start.X;
|
//计算y偏移量
|
m.OffsetY = m.OffsetY + point.Y - start.Y;
|
viewBox.RenderTransform = new MatrixTransform(m);
|
//给鼠标起点和图片临时位置重新赋值
|
start = point;
|
}
|
|
|
}
|
}
|