improve:墨迹平滑
This commit is contained in:
@@ -1298,7 +1298,7 @@ namespace Ink_Canvas {
|
||||
private void ToggleSwitchAdvancedBezierSmoothing_Toggled(object sender, RoutedEventArgs e) {
|
||||
if (!isLoaded) return;
|
||||
Settings.Canvas.UseAdvancedBezierSmoothing = ToggleSwitchAdvancedBezierSmoothing.IsOn;
|
||||
|
||||
|
||||
// 启用高级贝塞尔平滑时自动禁用原来的FitToCurve
|
||||
if (ToggleSwitchAdvancedBezierSmoothing.IsOn)
|
||||
{
|
||||
@@ -1306,9 +1306,61 @@ namespace Ink_Canvas {
|
||||
Settings.Canvas.FitToCurve = false;
|
||||
drawingAttributes.FitToCurve = false;
|
||||
}
|
||||
|
||||
|
||||
// 更新墨迹平滑管理器配置
|
||||
_inkSmoothingManager?.UpdateConfig();
|
||||
|
||||
SaveSettingsToFile();
|
||||
}
|
||||
|
||||
// 注释掉这些方法,因为对应的UI控件还没有在XAML中定义
|
||||
/*
|
||||
private void ToggleSwitchAsyncInkSmoothing_Toggled(object sender, RoutedEventArgs e) {
|
||||
if (!isLoaded) return;
|
||||
Settings.Canvas.UseAsyncInkSmoothing = ToggleSwitchAsyncInkSmoothing.IsOn;
|
||||
_inkSmoothingManager?.UpdateConfig();
|
||||
SaveSettingsToFile();
|
||||
}
|
||||
|
||||
private void ToggleSwitchHardwareAcceleration_Toggled(object sender, RoutedEventArgs e) {
|
||||
if (!isLoaded) return;
|
||||
Settings.Canvas.UseHardwareAcceleration = ToggleSwitchHardwareAcceleration.IsOn;
|
||||
_inkSmoothingManager?.UpdateConfig();
|
||||
SaveSettingsToFile();
|
||||
}
|
||||
|
||||
private void ComboBoxInkSmoothingQuality_SelectionChanged(object sender, SelectionChangedEventArgs e) {
|
||||
if (!isLoaded) return;
|
||||
Settings.Canvas.InkSmoothingQuality = ComboBoxInkSmoothingQuality.SelectedIndex;
|
||||
_inkSmoothingManager?.UpdateConfig();
|
||||
SaveSettingsToFile();
|
||||
}
|
||||
|
||||
private void SliderMaxConcurrentTasks_ValueChanged(object sender, RoutedPropertyChangedEventArgs<double> e) {
|
||||
if (!isLoaded) return;
|
||||
Settings.Canvas.MaxConcurrentSmoothingTasks = (int)SliderMaxConcurrentTasks.Value;
|
||||
_inkSmoothingManager?.UpdateConfig();
|
||||
SaveSettingsToFile();
|
||||
}
|
||||
|
||||
private void ButtonApplyRecommendedSettings_Click(object sender, RoutedEventArgs e) {
|
||||
// 应用推荐的性能设置
|
||||
Helpers.InkSmoothingManager.ApplyRecommendedSettings();
|
||||
LoadSettings(false);
|
||||
_inkSmoothingManager?.UpdateConfig();
|
||||
SaveSettingsToFile();
|
||||
|
||||
ShowNotification("已应用推荐的性能设置");
|
||||
}
|
||||
|
||||
private void ButtonShowPerformanceStats_Click(object sender, RoutedEventArgs e) {
|
||||
if (_inkSmoothingManager != null)
|
||||
{
|
||||
var stats = _inkSmoothingManager.GetPerformanceStats();
|
||||
ShowNotification($"性能统计: {stats}");
|
||||
}
|
||||
}
|
||||
*/
|
||||
|
||||
private void ToggleSwitchAutoSaveStrokesInPowerPoint_Toggled(object sender, RoutedEventArgs e) {
|
||||
if (!isLoaded) return;
|
||||
|
||||
@@ -538,6 +538,23 @@ namespace Ink_Canvas {
|
||||
ToggleSwitchAdvancedBezierSmoothing.IsOn = false;
|
||||
drawingAttributes.FitToCurve = false;
|
||||
}
|
||||
|
||||
// 注释掉新的墨迹平滑性能设置,因为UI控件还没有定义
|
||||
/*
|
||||
// 初始化新的墨迹平滑性能设置
|
||||
ToggleSwitchAsyncInkSmoothing.IsOn = Settings.Canvas.UseAsyncInkSmoothing;
|
||||
ToggleSwitchHardwareAcceleration.IsOn = Settings.Canvas.UseHardwareAcceleration;
|
||||
ComboBoxInkSmoothingQuality.SelectedIndex = Settings.Canvas.InkSmoothingQuality;
|
||||
SliderMaxConcurrentTasks.Value = Settings.Canvas.MaxConcurrentSmoothingTasks > 0 ?
|
||||
Settings.Canvas.MaxConcurrentSmoothingTasks : Environment.ProcessorCount;
|
||||
|
||||
// 检查硬件加速支持
|
||||
if (!Helpers.InkSmoothingManager.IsHardwareAccelerationSupported())
|
||||
{
|
||||
ToggleSwitchHardwareAcceleration.IsEnabled = false;
|
||||
// 可以添加提示文本说明硬件加速不可用
|
||||
}
|
||||
*/
|
||||
|
||||
// 初始化直线自动拉直相关设置
|
||||
ToggleSwitchAutoStraightenLine.IsOn = Settings.Canvas.AutoStraightenLine;
|
||||
|
||||
@@ -1579,17 +1579,16 @@ namespace Ink_Canvas {
|
||||
{
|
||||
try
|
||||
{
|
||||
var advancedSmoothing = new Helpers.AdvancedBezierSmoothing
|
||||
{
|
||||
};
|
||||
|
||||
// 对临时笔画应用平滑
|
||||
if (lastTempStroke != null)
|
||||
if (lastTempStroke != null && _inkSmoothingManager != null)
|
||||
{
|
||||
var smoothedStroke = advancedSmoothing.SmoothStroke(lastTempStroke);
|
||||
inkCanvas.Strokes.Remove(lastTempStroke);
|
||||
lastTempStroke = smoothedStroke;
|
||||
inkCanvas.Strokes.Add(smoothedStroke);
|
||||
var smoothedStroke = _inkSmoothingManager.SmoothStroke(lastTempStroke);
|
||||
if (smoothedStroke != lastTempStroke)
|
||||
{
|
||||
inkCanvas.Strokes.Remove(lastTempStroke);
|
||||
lastTempStroke = smoothedStroke;
|
||||
inkCanvas.Strokes.Add(smoothedStroke);
|
||||
}
|
||||
}
|
||||
}
|
||||
catch (Exception ex)
|
||||
|
||||
@@ -2,6 +2,7 @@
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using System.Threading.Tasks;
|
||||
using System.Windows;
|
||||
using System.Windows.Controls;
|
||||
using System.Windows.Ink;
|
||||
@@ -587,18 +588,27 @@ namespace Ink_Canvas {
|
||||
// 检查原始笔画是否仍然存在于画布中
|
||||
if (inkCanvas.Strokes.Contains(e.Stroke))
|
||||
{
|
||||
var advancedSmoothing = new Helpers.AdvancedBezierSmoothing
|
||||
// 使用新的异步墨迹平滑管理器
|
||||
if (Settings.Canvas.UseAsyncInkSmoothing && _inkSmoothingManager != null)
|
||||
{
|
||||
};
|
||||
// 异步处理
|
||||
_ = ProcessStrokeAsync(e.Stroke);
|
||||
}
|
||||
else
|
||||
{
|
||||
// 同步处理(向后兼容)
|
||||
var smoothedStroke = _inkSmoothingManager?.SmoothStroke(e.Stroke) ?? e.Stroke;
|
||||
|
||||
var smoothedStroke = advancedSmoothing.SmoothStroke(e.Stroke);
|
||||
|
||||
// 替换原始笔画
|
||||
SetNewBackupOfStroke();
|
||||
_currentCommitType = CommitReason.ShapeRecognition;
|
||||
inkCanvas.Strokes.Remove(e.Stroke);
|
||||
inkCanvas.Strokes.Add(smoothedStroke);
|
||||
_currentCommitType = CommitReason.UserInput;
|
||||
if (smoothedStroke != e.Stroke)
|
||||
{
|
||||
// 替换原始笔画
|
||||
SetNewBackupOfStroke();
|
||||
_currentCommitType = CommitReason.ShapeRecognition;
|
||||
inkCanvas.Strokes.Remove(e.Stroke);
|
||||
inkCanvas.Strokes.Add(smoothedStroke);
|
||||
_currentCommitType = CommitReason.UserInput;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
catch (Exception ex)
|
||||
@@ -613,6 +623,32 @@ namespace Ink_Canvas {
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 异步处理笔画平滑
|
||||
/// </summary>
|
||||
private async Task ProcessStrokeAsync(Stroke originalStroke)
|
||||
{
|
||||
try
|
||||
{
|
||||
await _inkSmoothingManager.SmoothStrokeAsync(originalStroke, (original, smoothed) =>
|
||||
{
|
||||
// 在UI线程上执行笔画替换
|
||||
if (inkCanvas.Strokes.Contains(original) && smoothed != original)
|
||||
{
|
||||
SetNewBackupOfStroke();
|
||||
_currentCommitType = CommitReason.ShapeRecognition;
|
||||
inkCanvas.Strokes.Remove(original);
|
||||
inkCanvas.Strokes.Add(smoothed);
|
||||
_currentCommitType = CommitReason.UserInput;
|
||||
}
|
||||
});
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
System.Diagnostics.Debug.WriteLine($"异步墨迹平滑失败: {ex.Message}");
|
||||
}
|
||||
}
|
||||
|
||||
// New method: Checks if a stroke is potentially a straight line
|
||||
private bool IsPotentialStraightLine(Stroke stroke) {
|
||||
// 确保有足够的点来进行线条分析
|
||||
|
||||
Reference in New Issue
Block a user