src/docs/flow-ocr-image.md
STranslate/ViewModels/MainWindowViewModel.cs
ScreenshotTranslateAsync() / ScreenshotTranslateHandlerAsync():截图翻译。OcrAsync() / OcrHandlerAsync():OCR 窗口入口。SilentOcrAsync() / SilentOcrHandlerAsync():静默 OCR。HandleCapturedText(string, TextSeparatorHandleScope):截图翻译和静默 OCR 的文本后处理。STranslate/ViewModels/OcrWindowViewModel.cs
ExecuteAsync(Bitmap):OCR 窗口主执行命令。STranslate/Core/Screenshot.cs
GetScreenshotAsync():截图前隐藏主窗口,调用 ScreenGrabber。STranslate/Core/OcrWordBuilder.cs
OcrContent 转成图片文本选中所需的 OcrWord。STranslate/Core/Utilities.cs
PrepareOcrResult():当结构化 OCR 没有扁平内容时投影出 OcrContents。STranslate.Plugin/IOcrPlugin.cs
IOcrPlugin、OcrRequest、OcrResult、OcrContent、BoxPoint。MainWindowViewModel.ScreenshotTranslateAsync() 获取当前可用 OCR 服务。IScreenshot.GetScreenshotAsync() 获取截图位图;主窗口可见且非置顶时会先折叠,避免截到自身。ScreenshotTranslateHandlerAsync() 调用 OCR 插件 RecognizeAsync()。HandleCapturedText(text, TextSeparatorHandleScope.ScreenshotTranslate) 处理换行与可选分隔符。ExecuteTranslate(),复用主翻译链路。Settings.FocusInputAfterScreenshotTranslate 控制完成后是否显示主窗口并聚焦输入框;关闭且主窗口置顶时只更新结果不抢焦点。SilentOcrAsync() 截图后调用当前 OCR 服务识别文本。TextSeparatorHandleScope.SilentOcr,写入前复用 HandleCapturedText() 处理换行与 _ / - 分隔符。OcrWindowViewModel.ExecuteAsync(bitmap) 设置执行态并清理旧结果。RecognizeAsync(new OcrRequest(data, Settings.OcrLanguage, bitmap.Width, bitmap.Height))。Utilities.PrepareOcrResult();如果插件只填充结构化 Regions,宿主会投影出兼容的 OcrContents。OcrWords 和 Result 文本。Settings.IsOcrShowingAnnotated 决定显示原图还是标注图。OcrResult.OcrContents:兼容旧插件的扁平 OCR 文本块列表。OcrResult.Regions:结构化区域,层级为 OcrRegion -> OcrParagraph -> OcrContent。OcrContent.BoxPoints:文本坐标框顶点,使用图片像素坐标,普通 OCR 可为空。OcrResult.Text:优先从 OcrContents 聚合;没有扁平内容时从 Regions 聚合段落文本。结构化 OCR 和图片翻译分段逻辑的细节见 flow-image-translation.md。
Settings.OcrLanguage:OCR 语言。Settings.CopyAfterOcr:OCR 后是否复制识别文本。Settings.IsOcrShowingAnnotated:OCR 窗口默认显示标注图还是原图。Settings.FocusInputAfterScreenshotTranslate:截图翻译完成后的主窗口焦点策略。Settings.TextSeparatorHandleType / TextSeparatorHandleScopes:截图翻译和静默 OCR 的取词文本后处理。图片翻译专用 OCR 服务、翻译服务、分段模式和覆盖图设置见 flow-image-translation.md。
当 OCR 服务未配置或全部禁用时,使用 Helper.PromptConfigureService 弹出 MessageBox(OK/Cancel)。弹窗底层统一走 AppMessageBox,活动窗口优先、没有活动窗口时通过主屏中心的临时透明 owner 显示:
OcrPage。MainWindowViewModel.ScreenshotTranslateHandlerAsync catch:先 Show() 主窗口,再 _snackbar.ShowError。MainWindowViewModel.SilentOcrHandlerAsync catch:先 Show() 主窗口,再 _snackbar.ShowError。OcrWindowViewModel.ExecuteAsync catch:在 OCR 窗口内 _snackbar.ShowError。_snackbar.ShowWarning。图片翻译窗口的服务提示、翻译失败和语言检测失败见 flow-image-translation.md。
STranslate/ViewModels/MainWindowViewModel.csSTranslate/ViewModels/OcrWindowViewModel.csSTranslate/Core/Screenshot.csSTranslate/Core/OcrWordBuilder.csSTranslate/Core/Utilities.csSTranslate.Plugin/IOcrPlugin.csScreenshot.GetScreenshotAsync() 处理窗口折叠、等待时机和截图工具调用。MainWindowViewModel.HandleCapturedText(),避免截图翻译和静默 OCR 行为分叉。BoxPoints;如果服务商返回归一化坐标,插件应使用 OcrRequest.PixelWidth / PixelHeight 自行换算。OcrWordBuilder 与 ImageZoom。