src/docs/flow-ocr-image.md
STranslate/ViewModels/MainWindowViewModel.cs
ScreenshotTranslateAsync() / ScreenshotTranslateHandlerAsync()OcrAsync() / OcrHandlerAsync()ImageTranslateAsync() / ImageTranslateHandlerAsync()STranslate/ViewModels/OcrWindowViewModel.cs
ExecuteAsync(Bitmap):OCR 窗口主执行命令。STranslate/ViewModels/ImageTranslateWindowViewModel.cs
ExecuteAsync(Bitmap):图片翻译窗口主执行命令。ApplyLayoutAnalysis(OcrResult):OCR 文本块空间合并。STranslate/Core/Screenshot.cs
GetScreenshotAsync():截图前隐藏主窗口,调用 ScreenGrabber。STranslate/Services/OcrService.cs
ImageTranslateOcrService:图片翻译专用 OCR 服务选择与持久化。MainWindowViewModel.ScreenshotTranslateAsync() 先取可用 OCR 服务。IScreenshot.GetScreenshotAsync() 获取截图位图(主窗口可见且非置顶时先折叠,避免截到自身)。ScreenshotTranslateHandlerAsync() 调 OCR RecognizeAsync()。ExecuteTranslate() 进入主翻译链路。OcrWindowViewModel.ExecuteAsync(bitmap) 设置执行态并清理旧结果。RecognizeAsync(new OcrRequest(data, Settings.OcrLanguage))。OcrWords 与 Result 文本Settings.IsOcrShowingAnnotated 决定显示原图还是标注图。ImageTranslateWindowViewModel.ExecuteAsync(bitmap) 获取图片翻译专用 OCR 服务(无则回退启用 OCR 服务)。ApplyLayoutAnalysis():按空间相邻关系分组合并文本块。TranslateService.ImageTranslateService(必须是 ITranslatePlugin,词典服务不支持)。OcrContent.Text,再把译文覆盖回 OcrResult.OcrContents。_annotatedImage:合并后边框图_resultImage:在原图覆盖译文Settings.IsImTranShowingAnnotated 控制最终显示哪种图。OcrService.ImageTranslateOcrService,由 OnSelectedOcrEngineChanged 写入 ServiceSettings.ImageTranslateOcrSvcID。TranslateService.ImageTranslateService,由 OnSelectedTranslateEngineChanged 写入 ServiceSettings.ImageTranslateSvcID。OcrResult / OcrContent / BoxPoint:OCR 原始与结构化文本块。Settings):
VerticalThresholdRatioHorizontalThresholdRatioLineSpacingThresholdRatioWordSpacingThresholdRatioIsOcrShowingAnnotatedIsImTranShowingAnnotatedIsImTranShowingTextControlImageQualityOcrLanguageSTranslate/ViewModels/MainWindowViewModel.csSTranslate/ViewModels/OcrWindowViewModel.csSTranslate/ViewModels/ImageTranslateWindowViewModel.csSTranslate/Core/Screenshot.csSTranslate/Services/OcrService.csSTranslate/Services/TranslateService.csSTranslate.Plugin/IOcrPlugin.csApplyLayoutAnalysis() 与四个阈值参数,不要只改渲染层。content.Text 后、GenerateTranslatedImage 前插入。Screenshot.GetScreenshotAsync() 处理窗口折叠与等待时机。OcrService.GetImageTranslateOcrServiceOrDefault() 与对应 VM 的选中逻辑。