122 lines
4.1 KiB
C#
122 lines
4.1 KiB
C#
using System;
|
|
using System.Drawing;
|
|
using System.Drawing.Drawing2D;
|
|
using System.Drawing.Imaging;
|
|
using System.IO;
|
|
using System.Threading.Tasks;
|
|
using System.Windows;
|
|
using System.Windows.Forms;
|
|
|
|
namespace Ink_Canvas
|
|
{
|
|
public partial class MainWindow : Window
|
|
{
|
|
private void SaveScreenShot(bool isHideNotification, string fileName = null)
|
|
{
|
|
var savePath = Settings.Automation.IsSaveScreenshotsInDateFolders
|
|
? GetDateFolderPath(fileName)
|
|
: GetDefaultFolderPath();
|
|
|
|
CaptureAndSaveScreenshot(savePath, isHideNotification);
|
|
|
|
if (Settings.Automation.IsAutoSaveStrokesAtScreenshot)
|
|
SaveInkCanvasStrokes(false);
|
|
}
|
|
|
|
internal void SaveScreenShotToDesktop()
|
|
{
|
|
var desktopPath = Path.Combine(
|
|
Environment.GetFolderPath(Environment.SpecialFolder.DesktopDirectory),
|
|
$"{DateTime.Now:yyyy-MM-dd_HH-mm-ss}.png");
|
|
|
|
CaptureAndSaveScreenshot(desktopPath, false);
|
|
|
|
if (Settings.Automation.IsAutoSaveStrokesAtScreenshot)
|
|
SaveInkCanvasStrokes(false);
|
|
}
|
|
|
|
// 提取公共的截图和保存逻辑
|
|
private void CaptureAndSaveScreenshot(string savePath, bool isHideNotification)
|
|
{
|
|
var rc = SystemInformation.VirtualScreen;
|
|
|
|
using (var bitmap = new Bitmap(rc.Width, rc.Height, PixelFormat.Format32bppArgb))
|
|
using (var memoryGraphics = Graphics.FromImage(bitmap))
|
|
{
|
|
// 设置高质量渲染
|
|
memoryGraphics.CompositingQuality = CompositingQuality.HighQuality;
|
|
memoryGraphics.InterpolationMode = InterpolationMode.HighQualityBicubic;
|
|
memoryGraphics.SmoothingMode = SmoothingMode.HighQuality;
|
|
memoryGraphics.CompositingMode = CompositingMode.SourceOver;
|
|
|
|
memoryGraphics.CopyFromScreen(rc.X, rc.Y, 0, 0, rc.Size, CopyPixelOperation.SourceCopy);
|
|
|
|
// 确保目录存在
|
|
var directory = Path.GetDirectoryName(savePath);
|
|
if (!Directory.Exists(directory))
|
|
{
|
|
Directory.CreateDirectory(directory);
|
|
}
|
|
|
|
// 使用PNG格式保存,确保透明度信息不丢失
|
|
bitmap.Save(savePath, ImageFormat.Png);
|
|
}
|
|
|
|
if (!isHideNotification)
|
|
{
|
|
ShowNotification($"截图成功保存至 {savePath}");
|
|
}
|
|
_ = Task.Run(async () =>
|
|
{
|
|
try
|
|
{
|
|
var delayMinutes = Settings?.Dlass?.AutoUploadDelayMinutes ?? 0;
|
|
if (delayMinutes > 0)
|
|
{
|
|
await Task.Delay(TimeSpan.FromMinutes(delayMinutes));
|
|
}
|
|
|
|
await Helpers.DlassNoteUploader.UploadNoteFileAsync(savePath);
|
|
}
|
|
catch (Exception)
|
|
{
|
|
}
|
|
});
|
|
}
|
|
|
|
// 获取日期文件夹路径
|
|
private string GetDateFolderPath(string fileName)
|
|
{
|
|
if (string.IsNullOrWhiteSpace(fileName))
|
|
{
|
|
fileName = DateTime.Now.ToString("HH-mm-ss");
|
|
}
|
|
|
|
var basePath = Settings.Automation.AutoSavedStrokesLocation;
|
|
var dateFolder = DateTime.Now.ToString("yyyyMMdd");
|
|
|
|
return Path.Combine(
|
|
basePath,
|
|
"Auto Saved - Screenshots",
|
|
dateFolder,
|
|
$"{fileName}.png");
|
|
}
|
|
|
|
// 获取默认文件夹路径
|
|
private string GetDefaultFolderPath()
|
|
{
|
|
var basePath = Settings.Automation.AutoSavedStrokesLocation;
|
|
var screenshotsFolder = Path.Combine(basePath, "Auto Saved - Screenshots");
|
|
|
|
if (!Directory.Exists(screenshotsFolder))
|
|
{
|
|
Directory.CreateDirectory(screenshotsFolder);
|
|
}
|
|
|
|
return Path.Combine(
|
|
screenshotsFolder,
|
|
$"{DateTime.Now:yyyy-MM-dd_HH-mm-ss}.png");
|
|
}
|
|
}
|
|
}
|