104 lines
2.7 KiB
C#
104 lines
2.7 KiB
C#
|
using System;
|
|||
|
using Avalonia;
|
|||
|
using Avalonia.Controls;
|
|||
|
using Avalonia.Input;
|
|||
|
using Avalonia.Markup.Xaml;
|
|||
|
using DispenserUI.ViewModels.Components;
|
|||
|
using DispenserUI.Views.Controls;
|
|||
|
|
|||
|
namespace DispenserUI.Views.Windows;
|
|||
|
|
|||
|
public partial class CameraViewerWindow : Window
|
|||
|
{
|
|||
|
public CameraViewerVM ViewModel { get; } = new();
|
|||
|
|
|||
|
public CameraViewerWindow()
|
|||
|
{
|
|||
|
DataContext = ViewModel;
|
|||
|
InitializeComponent();
|
|||
|
|
|||
|
Body = this.FindControl<Grid>("Body")!;
|
|||
|
Viewer = this.FindControl<ImageViewer>("Viewer")!;
|
|||
|
|
|||
|
this.GetObservable(WindowStateProperty).Subscribe(state =>
|
|||
|
{
|
|||
|
if (state == WindowState.Maximized)
|
|||
|
{
|
|||
|
ViewModel.IsFullScreen = true;
|
|||
|
// 全屏
|
|||
|
Body.ColumnDefinitions[1].Width = new GridLength(0);
|
|||
|
}
|
|||
|
else if (state == WindowState.Normal)
|
|||
|
{
|
|||
|
// 恢复正常大小
|
|||
|
Body.ColumnDefinitions[1].Width = new GridLength(400);
|
|||
|
ViewModel.IsFullScreen = false;
|
|||
|
SystemDecorations = SystemDecorations.Full;
|
|||
|
}
|
|||
|
});
|
|||
|
|
|||
|
ViewModel.InitViewer(Viewer);
|
|||
|
ViewModel.InitWindow(this);
|
|||
|
}
|
|||
|
|
|||
|
private void InitializeComponent()
|
|||
|
{
|
|||
|
AvaloniaXamlLoader.Load(this);
|
|||
|
}
|
|||
|
|
|||
|
|
|||
|
protected override void OnClosing(WindowClosingEventArgs e)
|
|||
|
{
|
|||
|
base.OnClosing(e);
|
|||
|
// 退出的时候顺便停止采集视频
|
|||
|
ViewModel.StopCaptureVideo();
|
|||
|
ViewModel.DisableCameraListener();
|
|||
|
ViewModel.StopRecordingVideo();
|
|||
|
}
|
|||
|
|
|||
|
protected override void OnResized(WindowResizedEventArgs e)
|
|||
|
{
|
|||
|
base.OnResized(e);
|
|||
|
ViewModel.OnWindowResize();
|
|||
|
}
|
|||
|
|
|||
|
private void OnNormalWindowClicked(object? sender, TappedEventArgs e)
|
|||
|
{
|
|||
|
WindowState = WindowState.Normal;
|
|||
|
Body.ColumnDefinitions[1].Width = new GridLength(400);
|
|||
|
ViewModel.IsFullScreen = false;
|
|||
|
}
|
|||
|
|
|||
|
/// <summary>
|
|||
|
/// 电机缩小
|
|||
|
/// </summary>
|
|||
|
private void OnNarrowClicked(object? sender, TappedEventArgs e)
|
|||
|
{
|
|||
|
Viewer.ImageShrink();
|
|||
|
}
|
|||
|
|
|||
|
/// <summary>
|
|||
|
/// 点击放大
|
|||
|
/// </summary>
|
|||
|
private void OnEnlargeClicked(object? sender, TappedEventArgs e)
|
|||
|
{
|
|||
|
Viewer.ImageEnlarge();
|
|||
|
}
|
|||
|
|
|||
|
|
|||
|
private void OnPixelChanged(object? sender, Point point)
|
|||
|
{
|
|||
|
ViewModel.PixelCoordinate = $"{point.X:0.###} * {point.Y:0.###}";
|
|||
|
}
|
|||
|
|
|||
|
private void OnScaleRatioChanged(object? sender, double ratio)
|
|||
|
{
|
|||
|
ViewModel.UpdateScaleRatio(ratio);
|
|||
|
}
|
|||
|
|
|||
|
private void OnCenterPixelChanged(object? sender, Point e)
|
|||
|
{
|
|||
|
Console.WriteLine($"中心像素点: {e}");
|
|||
|
ViewModel.CenterPixelPoint = e;
|
|||
|
}
|
|||
|
}
|