feat(docstring):添加部分docstring (#376)
* feat(docstring):添加docstring Signed-off-by: doudou0720 <98651603+doudou0720@users.noreply.github.com> * fix(docstring):修复部分docstring格式错误 Signed-off-by: doudou0720 <98651603+doudou0720@users.noreply.github.com> * fix(docstring):修复部分docstring Signed-off-by: doudou0720 <98651603+doudou0720@users.noreply.github.com> * chore(Docstring):MW_* 前14 * chore(Docstring):MW_* part 2 * chore(Docstring):MW_* part 3 * chore:优化缩进 * fix: 修复数学计算中的潜在除零错误和数值稳定性问题 Signed-off-by: doudou0720 <98651603+doudou0720@users.noreply.github.com> * chore:删除Rebase时多余的OOBE函数 * chore: 更新代码注释和文档格式 修复XML文档注释中的格式问题,统一使用<c>和<see>标签 更新ConfigHelper类的预留说明,明确未来扩展用途 优化TimerDisplayDate_Elapsed方法的注释,说明UI异步更新机制 合并重复的注释摘要行,提高文档可读性 添加形状识别功能的64位进程限制说明 修正视频呈现器设备选择逻辑的文档说明 * chore(IPPTLinkManager): 更新TryEndSlideShow方法的XML注释格式 * chore: 修正代码注释中的术语和格式问题 更新多个文件中的XML注释,统一使用<see langword="..."/>标记代替<c>...</c>标记 规范术语使用(如"延迟初始化"代替"懒惰初始化") 修正注释中的格式错误和补充说明 调整代码区域的注释对齐格式 --------- Signed-off-by: doudou0720 <98651603+doudou0720@users.noreply.github.com>
This commit is contained in:
@@ -41,7 +41,18 @@ namespace Ink_Canvas
|
||||
|
||||
public partial class MainWindow : Window
|
||||
{
|
||||
// 截图并插入到画布
|
||||
/// <summary>
|
||||
/// 截图并插入到画布
|
||||
/// </summary>
|
||||
/// <returns>异步任务</returns>
|
||||
/// <remarks>
|
||||
/// 该方法会:
|
||||
/// 1. 隐藏主窗口以避免截图包含窗口本身
|
||||
/// 2. 启动区域选择截图
|
||||
/// 3. 恢复窗口显示
|
||||
/// 4. 处理截图结果并插入到画布
|
||||
/// 5. 支持摄像头截图和区域截图
|
||||
/// </remarks>
|
||||
private async Task CaptureScreenshotAndInsert()
|
||||
{
|
||||
try
|
||||
@@ -118,7 +129,18 @@ namespace Ink_Canvas
|
||||
}
|
||||
}
|
||||
|
||||
// 直接全屏截图并插入到画布
|
||||
/// <summary>
|
||||
/// 直接全屏截图并插入到画布
|
||||
/// </summary>
|
||||
/// <returns>异步任务</returns>
|
||||
/// <remarks>
|
||||
/// 该方法会:
|
||||
/// 1. 隐藏主窗口以避免截图包含窗口本身
|
||||
/// 2. 获取虚拟屏幕边界
|
||||
/// 3. 截取全屏
|
||||
/// 4. 将截图转换为WPF Image并插入到画布
|
||||
/// 5. 恢复窗口显示
|
||||
/// </remarks>
|
||||
private async Task CaptureFullScreenAndInsert()
|
||||
{
|
||||
try
|
||||
@@ -158,7 +180,16 @@ namespace Ink_Canvas
|
||||
}
|
||||
}
|
||||
|
||||
// 显示截图区域选择器
|
||||
/// <summary>
|
||||
/// 显示截图区域选择器
|
||||
/// </summary>
|
||||
/// <returns>截图结果,包含区域、路径和摄像头截图信息</returns>
|
||||
/// <remarks>
|
||||
/// 该方法会:
|
||||
/// 1. 显示截图选择器窗口
|
||||
/// 2. 获取用户选择的区域或摄像头截图
|
||||
/// 3. 返回截图结果
|
||||
/// </remarks>
|
||||
private async Task<ScreenshotResult?> ShowScreenshotSelector()
|
||||
{
|
||||
ScreenshotResult? result = null;
|
||||
@@ -206,7 +237,19 @@ namespace Ink_Canvas
|
||||
return result;
|
||||
}
|
||||
|
||||
// 截取指定屏幕区域
|
||||
/// <summary>
|
||||
/// 截取指定屏幕区域
|
||||
/// </summary>
|
||||
/// <param name="area">要截取的屏幕区域</param>
|
||||
/// <returns>截取的位图</returns>
|
||||
/// <remarks>
|
||||
/// 该方法会:
|
||||
/// 1. 确保区域在有效范围内
|
||||
/// 2. 调整区域边界,确保不超出屏幕范围
|
||||
/// 3. 创建支持透明度的位图
|
||||
/// 4. 设置高质量渲染
|
||||
/// 5. 截取屏幕区域
|
||||
/// </remarks>
|
||||
private Bitmap CaptureScreenArea(Rectangle area)
|
||||
{
|
||||
try
|
||||
@@ -246,7 +289,25 @@ namespace Ink_Canvas
|
||||
}
|
||||
}
|
||||
|
||||
// 将截图插入到画布
|
||||
/// <summary>
|
||||
/// 将截图插入到画布
|
||||
/// </summary>
|
||||
/// <param name="bitmap">要插入的位图</param>
|
||||
/// <returns>异步任务</returns>
|
||||
/// <remarks>
|
||||
/// 该方法会:
|
||||
/// 1. 验证位图有效性
|
||||
/// 2. 将Bitmap转换为WPF BitmapSource
|
||||
/// 3. 创建WPF Image控件
|
||||
/// 4. 生成唯一名称
|
||||
/// 5. 初始化TransformGroup
|
||||
/// 6. 设置截图属性,避免被InkCanvas选择系统处理
|
||||
/// 7. 初始化InkCanvas选择设置
|
||||
/// 8. 等待图片加载完成后进行居中处理
|
||||
/// 9. 添加到画布
|
||||
/// 10. 提交历史记录
|
||||
/// 11. 插入图片后切换到选择模式并刷新浮动栏高光显示
|
||||
/// </remarks>
|
||||
private async Task InsertScreenshotToCanvas(Bitmap bitmap)
|
||||
{
|
||||
try
|
||||
@@ -325,7 +386,23 @@ namespace Ink_Canvas
|
||||
}
|
||||
}
|
||||
|
||||
// 将BitmapSource插入到画布(用于摄像头截图)
|
||||
/// <summary>
|
||||
/// 将BitmapSource插入到画布(用于摄像头截图)
|
||||
/// </summary>
|
||||
/// <param name="bitmapSource">要插入的BitmapSource</param>
|
||||
/// <returns>异步任务</returns>
|
||||
/// <remarks>
|
||||
/// 该方法会:
|
||||
/// 1. 创建WPF Image控件
|
||||
/// 2. 生成唯一名称
|
||||
/// 3. 初始化TransformGroup
|
||||
/// 4. 设置截图属性,避免被InkCanvas选择系统处理
|
||||
/// 5. 初始化InkCanvas选择设置
|
||||
/// 6. 等待图片加载完成后进行居中处理
|
||||
/// 7. 添加到画布
|
||||
/// 8. 提交历史记录
|
||||
/// 9. 插入图片后切换到选择模式并刷新浮动栏高光显示
|
||||
/// </remarks>
|
||||
private async Task InsertBitmapSourceToCanvas(BitmapSource bitmapSource)
|
||||
{
|
||||
try
|
||||
@@ -384,7 +461,13 @@ namespace Ink_Canvas
|
||||
}
|
||||
}
|
||||
|
||||
// 初始化截图的TransformGroup
|
||||
/// <summary>
|
||||
/// 初始化截图的TransformGroup
|
||||
/// </summary>
|
||||
/// <param name="image">要初始化的Image控件</param>
|
||||
/// <remarks>
|
||||
/// 该方法会为截图创建一个包含缩放、平移和旋转变换的TransformGroup。
|
||||
/// </remarks>
|
||||
private void InitializeScreenshotTransform(Image image)
|
||||
{
|
||||
var transformGroup = new TransformGroup();
|
||||
@@ -394,7 +477,17 @@ namespace Ink_Canvas
|
||||
image.RenderTransform = transformGroup;
|
||||
}
|
||||
|
||||
// 绑定截图事件处理器
|
||||
/// <summary>
|
||||
/// 绑定截图事件处理器
|
||||
/// </summary>
|
||||
/// <param name="image">要绑定事件的Image控件</param>
|
||||
/// <remarks>
|
||||
/// 该方法会为截图绑定以下事件:
|
||||
/// 1. 鼠标事件(按下、释放、移动、滚轮)
|
||||
/// 2. 触摸事件(按下、释放、操作)
|
||||
/// 3. 设置光标为手形
|
||||
/// 4. 禁用InkCanvas对截图的选择处理
|
||||
/// </remarks>
|
||||
private void BindScreenshotEvents(Image image)
|
||||
{
|
||||
// 鼠标事件
|
||||
@@ -418,7 +511,27 @@ namespace Ink_Canvas
|
||||
image.Focusable = false;
|
||||
}
|
||||
|
||||
// 专门为截图优化的居中缩放方法
|
||||
/// <summary>
|
||||
/// 专门为截图优化的居中缩放方法
|
||||
/// </summary>
|
||||
/// <param name="image">要居中缩放的Image控件</param>
|
||||
/// <remarks>
|
||||
/// 该方法会:
|
||||
/// 1. 确保图片已加载
|
||||
/// 2. 获取画布的实际尺寸
|
||||
/// 3. 如果画布尺寸为0,使用窗口尺寸作为备选
|
||||
/// 4. 如果仍然为0,使用屏幕尺寸
|
||||
/// 5. 计算最大允许尺寸(画布的80%)
|
||||
/// 6. 获取图片的原始尺寸
|
||||
/// 7. 计算缩放比例
|
||||
/// 8. 如果图片本身比最大尺寸小,不进行缩放
|
||||
/// 9. 计算新的尺寸
|
||||
/// 10. 设置图片尺寸
|
||||
/// 11. 计算居中位置
|
||||
/// 12. 确保位置不为负数
|
||||
/// 13. 设置位置
|
||||
/// 14. 保持滚轮缩放和拖动功能
|
||||
/// </remarks>
|
||||
private void CenterAndScaleScreenshot(Image image)
|
||||
{
|
||||
try
|
||||
@@ -502,7 +615,27 @@ namespace Ink_Canvas
|
||||
}
|
||||
}
|
||||
|
||||
// 应用形状遮罩到截图
|
||||
/// <summary>
|
||||
/// 应用形状遮罩到截图
|
||||
/// </summary>
|
||||
/// <param name="bitmap">要应用遮罩的位图</param>
|
||||
/// <param name="path">遮罩路径</param>
|
||||
/// <param name="area">截图区域</param>
|
||||
/// <returns>应用遮罩后的位图</returns>
|
||||
/// <remarks>
|
||||
/// 该方法会:
|
||||
/// 1. 验证路径参数
|
||||
/// 2. 获取DPI缩放比例
|
||||
/// 3. 创建结果位图,确保支持透明度
|
||||
/// 4. 首先将整个位图设置为透明
|
||||
/// 5. 创建路径
|
||||
/// 6. 转换WPF坐标到GDI+坐标,考虑DPI缩放和屏幕偏移
|
||||
/// 7. 添加路径
|
||||
/// 8. 验证路径是否有效
|
||||
/// 9. 设置裁剪区域为路径内部
|
||||
/// 10. 在裁剪区域内绘制原始图像
|
||||
/// 11. 重置裁剪区域,确保后续操作不受影响
|
||||
/// </remarks>
|
||||
private Bitmap ApplyShapeMask(Bitmap bitmap, List<Point> path, Rectangle area)
|
||||
{
|
||||
try
|
||||
@@ -588,7 +721,21 @@ namespace Ink_Canvas
|
||||
}
|
||||
}
|
||||
|
||||
// 将System.Drawing.Bitmap转换为WPF BitmapSource
|
||||
/// <summary>
|
||||
/// 将System.Drawing.Bitmap转换为WPF BitmapSource
|
||||
/// </summary>
|
||||
/// <param name="bitmap">要转换的位图</param>
|
||||
/// <returns>转换后的BitmapSource</returns>
|
||||
/// <remarks>
|
||||
/// 该方法会:
|
||||
/// 1. 验证位图有效性
|
||||
/// 2. 验证位图尺寸
|
||||
/// 3. 使用更安全的方法转换位图
|
||||
/// 4. 根据像素格式选择合适的WPF像素格式
|
||||
/// 5. 创建BitmapSource
|
||||
/// 6. 冻结BitmapSource以提高性能
|
||||
/// 7. 如果转换失败,尝试使用备用方法
|
||||
/// </remarks>
|
||||
private BitmapSource ConvertBitmapToBitmapSource(Bitmap bitmap)
|
||||
{
|
||||
try
|
||||
@@ -673,7 +820,19 @@ namespace Ink_Canvas
|
||||
}
|
||||
}
|
||||
|
||||
// 备用的位图转换方法(使用内存流)
|
||||
/// <summary>
|
||||
/// 备用的位图转换方法(使用内存流)
|
||||
/// </summary>
|
||||
/// <param name="bitmap">要转换的位图</param>
|
||||
/// <returns>转换后的BitmapSource</returns>
|
||||
/// <remarks>
|
||||
/// 该方法会:
|
||||
/// 1. 验证位图有效性
|
||||
/// 2. 创建一个新的位图,确保格式正确
|
||||
/// 3. 在内存流中保存为PNG格式
|
||||
/// 4. 创建BitmapImage并加载内存流中的数据
|
||||
/// 5. 冻结BitmapImage以提高性能
|
||||
/// </remarks>
|
||||
private BitmapSource ConvertBitmapToBitmapSourceFallback(Bitmap bitmap)
|
||||
{
|
||||
try
|
||||
@@ -713,7 +872,21 @@ namespace Ink_Canvas
|
||||
}
|
||||
}
|
||||
|
||||
// 最简单的位图转换方法
|
||||
/// <summary>
|
||||
/// 最简单的位图转换方法
|
||||
/// </summary>
|
||||
/// <param name="bitmap">要转换的位图</param>
|
||||
/// <returns>转换后的BitmapSource</returns>
|
||||
/// <remarks>
|
||||
/// 该方法会:
|
||||
/// 1. 验证位图有效性
|
||||
/// 2. 使用最基础的方法:直接保存为PNG然后加载
|
||||
/// 3. 创建临时文件
|
||||
/// 4. 将位图保存为PNG格式到临时文件
|
||||
/// 5. 创建BitmapImage并加载临时文件
|
||||
/// 6. 冻结BitmapImage以提高性能
|
||||
/// 7. 清理临时文件
|
||||
/// </remarks>
|
||||
private BitmapSource ConvertBitmapToBitmapSourceSimple(Bitmap bitmap)
|
||||
{
|
||||
try
|
||||
@@ -760,7 +933,14 @@ namespace Ink_Canvas
|
||||
}
|
||||
}
|
||||
|
||||
// 获取DPI缩放比例
|
||||
/// <summary>
|
||||
/// 获取DPI缩放比例
|
||||
/// </summary>
|
||||
/// <returns>DPI缩放比例</returns>
|
||||
/// <remarks>
|
||||
/// 该方法会从当前窗口的PresentationSource获取DPI缩放比例。
|
||||
/// 如果无法获取,则返回默认值1.0。
|
||||
/// </remarks>
|
||||
private double GetDpiScale()
|
||||
{
|
||||
var source = PresentationSource.FromVisual(this);
|
||||
|
||||
Reference in New Issue
Block a user