-
Notifications
You must be signed in to change notification settings - Fork 1
/
Copy pathMainWindow.xaml.cs
130 lines (113 loc) · 3.96 KB
/
MainWindow.xaml.cs
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
using EZHolodotNet.Core;
using System.ComponentModel;
using System.Text;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Data;
using System.Windows.Documents;
using System.Windows.Input;
using System.Windows.Media;
using System.Windows.Media.Imaging;
using System.Windows.Navigation;
using System.Windows.Shapes;
using Wpf.Ui.Controls;
using Image = System.Windows.Controls.Image;
namespace EZHolodotNet
{
public class RelayCommand : ICommand
{
private readonly Action<object> _execute; // 支持参数的 Action
private readonly Func<object, bool> _canExecute; // 支持参数的 Func
public RelayCommand(Action<object> execute, Func<object, bool> canExecute = null)
{
_execute = execute ?? throw new ArgumentNullException(nameof(execute));
_canExecute = canExecute;
}
public event EventHandler CanExecuteChanged;
public bool CanExecute(object parameter)
{
return _canExecute == null || _canExecute(parameter);
}
public void Execute(object parameter)
{
_execute(parameter);
}
public void RaiseCanExecuteChanged()
{
CanExecuteChanged?.Invoke(this, EventArgs.Empty);
}
}
/// <summary>
/// Interaction logic for MainWindow.xaml
/// </summary>
public partial class MainWindow : Window,INotifyPropertyChanged
{
public event PropertyChangedEventHandler PropertyChanged;
private void OnPropertyChanged(string propertyName)
{
PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(propertyName));
}
private ImageProcesser? _imageProcesser;
public ImageProcesser? ImageProcesser
{
get => _imageProcesser;
set
{
if (!Equals(_imageProcesser, value))
{
_imageProcesser = value;
DataContext = value;
OnPropertyChanged(nameof(_imageProcesser));
}
}
}
public MainWindow()
{
try
{
InitializeComponent();
ImageProcesser = new(this);
DataContext = ImageProcesser;
}
catch (Exception e)
{
var uiMessageBox = new Wpf.Ui.Controls.MessageBox
{
Title = "OhSh*t!启动时发生错误,麻烦你汇报一下TT",
Content = e.Message,
CloseButtonText = "了解",
};
uiMessageBox.ShowDialogAsync();
}
}
private void Image_MouseMove(object sender, MouseEventArgs e)
{
if (ImageProcesser.OriginalImage == null) return;
var i = sender as Image;
var p = e.GetPosition(i);
ImageProcesser.MousePoint = new(p.X * ImageProcesser.OriginalImage.Cols/i.ActualWidth, p.Y * ImageProcesser.OriginalImage.Rows / i.ActualHeight);
ImageProcesser.ProcessManual(null);
}
private void Slider_MouseUp(object sender, MouseButtonEventArgs e)
{
if(ImageProcesser.IsAutoGeneratePreview)
ImageProcesser.ProcessScratch();
}
private void Image_MouseDown(object sender, MouseButtonEventArgs e)
{
if (ImageProcesser.OriginalImage == null) return;
ImageProcesser.ProcessManual(true);
}
private void Image_MouseUp(object sender, MouseButtonEventArgs e)
{
if (ImageProcesser.OriginalImage == null) return;
ImageProcesser.ProcessManual(false);
}
private void Image_MouseLeave(object sender, MouseEventArgs e)
{
if (ImageProcesser.OriginalImage == null) return;
ImageProcesser.ProcessManual(false);
ImageProcesser.MousePoint = new OpenCvSharp.Point(0,0);
}
}
}