Skip to content

Commit

Permalink
add: 传递处理后的图片至第二页内容
Browse files Browse the repository at this point in the history
  • Loading branch information
chenxuuu committed Sep 11, 2024
1 parent 3204845 commit 11c4e0a
Show file tree
Hide file tree
Showing 7 changed files with 87 additions and 78 deletions.
30 changes: 17 additions & 13 deletions Image2Display/Image2Display/Utils.cs
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,7 @@
using Avalonia.Styling;
using HarfBuzzSharp;
using Image2Display.Helpers;
using Image2Display.Models;
using Microsoft.Extensions.Configuration;
using System;
using System.Collections.Generic;
Expand Down Expand Up @@ -164,20 +165,23 @@ public static async Task OpenWebLink(string url)
/// 主页面切换到目标选项卡
/// </summary>
/// <param name="target"></param>
public static void SwitchPage(string target)
public static Action<int>? SwitchPage = null;

/// <summary>
/// 中转图片数据
/// </summary>
public static ImageData? ImageDataTemp = null;
/// <summary>
/// 主动传递图片数据的方法,用于跨页面传递
/// </summary>
public static Action<ImageData>? ImportImageAction = null;

public static void SetImage2ConvertPage(ImageData img)
{
var type = target switch
{
"ImageConvert" => typeof(Views.ImageConvertView),
"ImageProcessing" => typeof(Views.ImageProcessingView),
"FontConvert" => typeof(Views.FontConvertView),
"FontProcessing" => typeof(Views.FontProcessingView),
"DataViewer" => typeof(Views.DataViewerView),
_ => typeof(Views.SettingsView)
};
var app = Application.Current!.ApplicationLifetime as IClassicDesktopStyleApplicationLifetime;
var mw = app!.MainWindow as Views.MainWindow;
mw!.ContentFrame.Navigate(type);
if (ImportImageAction is null)//如果没有设置传递方法,则说明还没初始化
ImageDataTemp = img;
else//直接传递
ImportImageAction(img);
}
}
}
68 changes: 16 additions & 52 deletions Image2Display/Image2Display/ViewModels/ImageConvertViewModel.cs
Original file line number Diff line number Diff line change
Expand Up @@ -16,72 +16,36 @@ namespace Image2Display.ViewModels
{
public partial class ImageConvertViewModel : ViewModelBase
{
private ImageData? _imageData;

[ObservableProperty]
public Bitmap? _imageShow = null;
[ObservableProperty]
private bool _bitmapLoading = false;
[ObservableProperty]
public IImmutableSolidColorBrush? _bgColor = Brushes.White;


//刷新图片
private async Task RefreshImage()
{
if(_imageData == null)
{
ImageShow?.Dispose();
ImageShow = null;
return;
}
BitmapLoading = true;
await Task.Run(() =>
{
ImageShow = ImageHelper.LoadFromImageData(_imageData!);
});
BitmapLoading = false;
}

[RelayCommand]
private async Task ImportImage()
public ImageConvertViewModel()
{
var r = await DialogHelper.ShowOpenFileDialogAsync(FilePickerFileTypes.ImageAll);
if (r is null || r.Count == 0)
return;

var file = r.First();
try
if (Utils.ImageDataTemp != null)
{
_imageData = new ImageData(file.Path.LocalPath);
await RefreshImage();
ImportImage(Utils.ImageDataTemp);
Utils.ImageDataTemp = null;
}
catch(Exception e)
else
{
Debug.WriteLine(e.Message);
return;
Utils.ImportImageAction = ImportImage;
}
}

[RelayCommand]
private async Task ClearImage()
private void ImportImage(ImageData img)
{
_imageData?.Dispose();
_imageData = null;
await RefreshImage();
Image = img;
}

private ImageData? Image = null;


[RelayCommand]
private void ChangeBgColor()
private void Test()
{
if(BgColor == Brushes.White)
if (Image == null)
{
BgColor = Brushes.Black;
}
else
{
BgColor = Brushes.White;
Debug.WriteLine("Image is null");
return;
}
Debug.WriteLine($"{Image.Width},{Image.Height}");
}
}
}
43 changes: 32 additions & 11 deletions Image2Display/Image2Display/ViewModels/ImageProcessingViewModel.cs
Original file line number Diff line number Diff line change
Expand Up @@ -192,19 +192,22 @@ private async Task OpenImageFile()
RealOriginalImage = null;
RealProcessedImage = null;

//读取图片,导入到OriginalImage内
RealOriginalImage = new ImageData(files[0].Path.LocalPath);
ImageWidth = RealOriginalImage.Width;
ImageHeight = RealOriginalImage.Height;
//复制图片数据到Processed
RealProcessedImage = new ImageData(RealOriginalImage);

//刷新到UI
RefreshOriginalImage();
RefreshProcessedImage();
await Task.Run(() =>
{
//读取图片,导入到OriginalImage内
RealOriginalImage = new ImageData(files[0].Path.LocalPath);
ImageWidth = RealOriginalImage.Width;
ImageHeight = RealOriginalImage.Height;
//复制图片数据到Processed
RealProcessedImage = new ImageData(RealOriginalImage);

//刷新到UI
RefreshOriginalImage();
RefreshProcessedImage();
});

//初始化其他变量
ImageWidth = RealOriginalImage.Width;
ImageWidth = RealOriginalImage!.Width;
ImageHeight = RealOriginalImage.Height;
CropX1 = 0;
CropY1 = 0;
Expand All @@ -217,13 +220,31 @@ private async Task OpenImageFile()
[RelayCommand]
private async Task SaveImageFile()
{
if (ProcessedImage == null)
return;
//保存图片
var path = await DialogHelper.ShowSaveFileDialogAsync("png");
if (path == null)
return;
ProcessedImage?.Save(path);
}

[RelayCommand]
private async Task SentImage2ConvertPage()
{
if (RealProcessedImage == null)
return;
IsProcessing = true;
//传递图片
await Task.Run(() =>
{
var img = new ImageData(RealProcessedImage);
Utils.SetImage2ConvertPage(img);
});
IsProcessing = false;
Utils.SwitchPage?.Invoke(2);
}

/// <summary>
/// 初始化ImageProcessingViewModel
/// </summary>
Expand Down
4 changes: 3 additions & 1 deletion Image2Display/Image2Display/Views/ImageConvertView.axaml
Original file line number Diff line number Diff line change
Expand Up @@ -14,5 +14,7 @@
x:CompileBindings="True"
x:DataType="vm:ImageConvertViewModel"
mc:Ignorable="d">
<Grid RowDefinitions="2*,*" />
<Grid RowDefinitions="2*,*">
<Button Command="{Binding TestCommand}" Content="test" />
</Grid>
</UserControl>
Original file line number Diff line number Diff line change
Expand Up @@ -66,6 +66,7 @@
Height="40"
Margin="10,10,0,0"
Padding="0"
Command="{Binding SentImage2ConvertPageCommand}"
ToolTip.Tip="{DynamicResource PerformModulation}">
<ui:SymbolIcon FontSize="20" Symbol="Accept" />
</Button>
Expand Down
1 change: 1 addition & 0 deletions Image2Display/Image2Display/Views/MainWindow.axaml
Original file line number Diff line number Diff line change
Expand Up @@ -29,6 +29,7 @@
</Design.DataContext>

<ui:NavigationView
Name="MainNavigationView"
AlwaysShowHeader="False"
IsPaneOpen="False"
IsPaneToggleButtonVisible="False"
Expand Down
18 changes: 17 additions & 1 deletion Image2Display/Image2Display/Views/MainWindow.axaml.cs
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
using Avalonia;
using Avalonia.Controls;
using Avalonia.Controls.ApplicationLifetimes;
using Avalonia.Controls.Chrome;
using Avalonia.Markup.Xaml.Styling;
using Avalonia.Media.Imaging;
Expand All @@ -16,11 +17,26 @@ public partial class MainWindow : AppWindow
public MainWindow()
{
InitializeComponent();
Utils.SwitchPage = (page) =>
{
MainNavigationView.SelectedItem = MainNavigationView.MenuItems[page];
};
}

private void MainNavigationView_SelectionChanged(object? sender, NavigationViewSelectionChangedEventArgs e)
{
var tag = (string)((NavigationViewItem)e.SelectedItem).Tag!;
Utils.SwitchPage(tag);
var type = tag switch
{
"ImageConvert" => typeof(Views.ImageConvertView),
"ImageProcessing" => typeof(Views.ImageProcessingView),
"FontConvert" => typeof(Views.FontConvertView),
"FontProcessing" => typeof(Views.FontProcessingView),
"DataViewer" => typeof(Views.DataViewerView),
_ => typeof(Views.SettingsView)
};
var app = Application.Current!.ApplicationLifetime as IClassicDesktopStyleApplicationLifetime;
var mw = app!.MainWindow as Views.MainWindow;
mw!.ContentFrame.Navigate(type);
}
}

0 comments on commit 11c4e0a

Please sign in to comment.