diff --git a/Ink Canvas/MainWindow.xaml b/Ink Canvas/MainWindow.xaml
index 197d77a4..7f9a583c 100644
--- a/Ink Canvas/MainWindow.xaml
+++ b/Ink Canvas/MainWindow.xaml
@@ -2335,6 +2335,17 @@
FontFamily="Microsoft YaHei UI" FontWeight="Bold"
Toggled="ToggleSwitchAutoSaveStrokesAtScreenshot_Toggled" />
+
+
+
+
+
+
+
diff --git a/Ink Canvas/MainWindow_cs/MW_Save&OpenStrokes.cs b/Ink Canvas/MainWindow_cs/MW_Save&OpenStrokes.cs
index abada6e0..17d5356e 100644
--- a/Ink Canvas/MainWindow_cs/MW_Save&OpenStrokes.cs
+++ b/Ink Canvas/MainWindow_cs/MW_Save&OpenStrokes.cs
@@ -6,6 +6,10 @@ using System.Windows;
using System.Windows.Ink;
using System.Windows.Input;
using File = System.IO.File;
+using System.Windows.Media;
+using System.Windows.Media.Imaging;
+using System.Windows.Forms;
+using OpenFileDialog = Microsoft.Win32.OpenFileDialog;
namespace Ink_Canvas {
public partial class MainWindow : Window {
@@ -33,9 +37,77 @@ namespace Ink_Canvas {
else
//savePathWithName = savePath + @"\" + DateTime.Now.ToString("u").Replace(':', '-') + ".icstk";
savePathWithName = savePath + @"\" + DateTime.Now.ToString("yyyy-MM-dd HH-mm-ss-fff") + ".icstk";
+
var fs = new FileStream(savePathWithName, FileMode.Create);
- inkCanvas.Strokes.Save(fs);
- if (newNotice) ShowNotification("墨迹成功保存至 " + savePathWithName);
+
+ if (Settings.Automation.IsSaveFullPageStrokes)
+ {
+ // 全页面保存模式 - 保存整个墨迹页面的图像
+ var bitmap = new System.Drawing.Bitmap(
+ (int)System.Windows.Forms.Screen.PrimaryScreen.Bounds.Width,
+ (int)System.Windows.Forms.Screen.PrimaryScreen.Bounds.Height);
+
+ using (var g = System.Drawing.Graphics.FromImage(bitmap))
+ {
+ // 创建黑色或透明背景
+ System.Drawing.Color bgColor = Settings.Canvas.UsingWhiteboard
+ ? System.Drawing.Color.White
+ : System.Drawing.Color.FromArgb(22, 41, 36); // 黑板背景色
+ g.Clear(bgColor);
+
+ // 将InkCanvas墨迹渲染到Visual
+ var visual = new DrawingVisual();
+ using (var dc = visual.RenderOpen())
+ {
+ // 创建一个VisualBrush,使用inkCanvas作为源
+ var visualBrush = new VisualBrush(inkCanvas);
+ // 绘制矩形并填充为inkCanvas的内容
+ dc.DrawRectangle(visualBrush, null, new Rect(0, 0, inkCanvas.ActualWidth, inkCanvas.ActualHeight));
+ }
+
+ // 创建适合墨迹画布尺寸的渲染位图
+ var rtb = new RenderTargetBitmap(
+ (int)inkCanvas.ActualWidth, (int)inkCanvas.ActualHeight,
+ 96, 96,
+ PixelFormats.Pbgra32);
+ rtb.Render(visual);
+
+ // 转换为GDI+ Bitmap并保存
+ var encoder = new PngBitmapEncoder();
+ encoder.Frames.Add(BitmapFrame.Create(rtb));
+
+ using (var ms = new MemoryStream())
+ {
+ encoder.Save(ms);
+ ms.Seek(0, SeekOrigin.Begin);
+ var imgBitmap = new System.Drawing.Bitmap(ms);
+
+ // 将生成的墨迹图像绘制到屏幕截图上
+ // 居中绘制,确保墨迹位于屏幕中央
+ int x = (bitmap.Width - imgBitmap.Width) / 2;
+ int y = (bitmap.Height - imgBitmap.Height) / 2;
+ g.DrawImage(imgBitmap, x, y);
+
+ // 保存为PNG
+ string imagePathWithName = Path.ChangeExtension(savePathWithName, "png");
+ bitmap.Save(imagePathWithName, System.Drawing.Imaging.ImageFormat.Png);
+
+ // 仍然保存墨迹文件以兼容旧版本
+ inkCanvas.Strokes.Save(fs);
+ }
+ }
+
+ // 显示提示
+ if (newNotice) ShowNotification("墨迹成功全页面保存至 " + Path.ChangeExtension(savePathWithName, "png"));
+ }
+ else
+ {
+ // 常规保存模式 - 仅保存墨迹对象
+ inkCanvas.Strokes.Save(fs);
+ if (newNotice) ShowNotification("墨迹成功保存至 " + savePathWithName);
+ }
+
+ fs.Close();
}
catch (Exception ex) {
ShowNotification("墨迹保存失败");
diff --git a/Ink Canvas/MainWindow_cs/MW_Settings.cs b/Ink Canvas/MainWindow_cs/MW_Settings.cs
index 05c07f1b..3e30aa63 100644
--- a/Ink Canvas/MainWindow_cs/MW_Settings.cs
+++ b/Ink Canvas/MainWindow_cs/MW_Settings.cs
@@ -1356,6 +1356,12 @@ namespace Ink_Canvas {
ToggleSwitchAutoSaveScreenShotInPowerPoint.IsOn;
SaveSettingsToFile();
}
+
+ private void ToggleSwitchSaveFullPageStrokes_Toggled(object sender, RoutedEventArgs e) {
+ if (!isLoaded) return;
+ Settings.Automation.IsSaveFullPageStrokes = ToggleSwitchSaveFullPageStrokes.IsOn;
+ SaveSettingsToFile();
+ }
#endregion
diff --git a/Ink Canvas/MainWindow_cs/MW_SettingsToLoad.cs b/Ink Canvas/MainWindow_cs/MW_SettingsToLoad.cs
index 886c538d..3b182cbb 100644
--- a/Ink Canvas/MainWindow_cs/MW_SettingsToLoad.cs
+++ b/Ink Canvas/MainWindow_cs/MW_SettingsToLoad.cs
@@ -699,6 +699,8 @@ namespace Ink_Canvas {
ToggleSwitchSaveScreenshotsInDateFolders.IsOn = Settings.Automation.IsSaveScreenshotsInDateFolders;
ToggleSwitchAutoSaveStrokesAtScreenshot.IsOn = Settings.Automation.IsAutoSaveStrokesAtScreenshot;
+
+ ToggleSwitchSaveFullPageStrokes.IsOn = Settings.Automation.IsSaveFullPageStrokes;
SideControlMinimumAutomationSlider.Value = Settings.Automation.MinimumAutomationStrokeNumber;
diff --git a/Ink Canvas/Resources/Settings.cs b/Ink Canvas/Resources/Settings.cs
index 33ea477d..7abe8f82 100644
--- a/Ink Canvas/Resources/Settings.cs
+++ b/Ink Canvas/Resources/Settings.cs
@@ -364,6 +364,9 @@ namespace Ink_Canvas
[JsonProperty("autoDelSavedFilesDaysThreshold")]
public int AutoDelSavedFilesDaysThreshold = 15;
+
+ [JsonProperty("isSaveFullPageStrokes")]
+ public bool IsSaveFullPageStrokes = false;
}
public class Advanced