Commit Graph

505 Commits

Author SHA1 Message Date
zhengxuan.zhang b95941cb50 feat: CNC 编排新增硬件控制能力(位置硬件还原 + 四类动作节点)
在 CNC 编排层补齐 P0 硬件控制能力,使检测编排可覆盖设备测试与校准流程。

位置节点硬件状态还原(核心):
- SavePositionNode 新增可选探测器采集参数快照,兼容旧 .xp 文件
- 执行到位后按序还原射线源电压/电流与探测器参数(先电压后电流)
- 射线未开弹窗提醒并暂停;还原失败弹窗提示并暂停不继续;服务不可用降级跳过
- 新增 ICncInteractionService 封装弹窗交互,便于单元测试

四类硬件动作节点:
- 射线源控制:开/关/设参/暖机/训机,安全时序 + 稳定等待
- 探测器校正:暗场/增益/坏像素/自动
- 安全门控制:开门/关门,复用内置联锁
- 几何设置:按 FDD 或放大倍率反算定位

模型、编辑器与工具栏接线:
- CncNodeType 追加四枚举值 + 四类节点 record + 多态判别符 + 值域校验
- 编辑器新增插入命令、类型判定、图标与工具栏入口
- IDetectorService 预留当前采集参数读取接口(暂返回 null,待硬件层完善)

系统设置:
- 新增数据存储根目录与日志目录配置及浏览按钮
- 修复保存时重复打开配置文件导致的配置冲突异常

测试:
- 新增 33 个单元测试,覆盖序列化往返、旧文件兼容、节点分派/降级/失败、
  位置还原全路径与混合程序执行
2026-07-03 14:09:24 +08:00
zhengxuan.zhang 94576fd1a7 标记图与算子工具箱的优化 2026-07-03 10:51:54 +08:00
zhengxuan.zhang 6568c1e724 初步优化比例尺 2026-07-03 09:29:06 +08:00
zhengxuan.zhang 9f073c9321 设置 射线源、探测器、运动控制 配置项和代码 同步 2026-07-03 08:58:48 +08:00
zhengxuan.zhang 4c3bf88589 feat(models): 检测归档融合模型扩展(Run/Node 分类、Map 元数据、Mark 查询、Batch 段)
- InspectionRunRecord 增 RunKind/MapId/MapSchemaVersion/OverviewImageRelativePath/
  ImageWidth/ImageHeight/TraceabilityId/InitialStateJson/MapUpdatedAt
- InspectionNodeResult 增 NodeKind(默认 Inspection)
- 新增枚举 InspectionRunKind{Cnc,ManualDocumentation}、InspectionNodeKind{Capture,Inspection}
- InspectionRunQuery 增 IncludeManualRuns(默认 false,仅返回 Cnc 运行)
- 新增 InspectionMarkQuery{RunId?/Status?/Type?}
- InspectionRunDetail 增 SchemaVersion(默认 1,读兼容)、Marks、Batch 段
- 新增 InspectionBatchSummary(manifest Batch 段模型)
feat(inspection-results): DB 无损扩表、Map 读写、标记表读写、manifest 融合升 SchemaVersion=2

- inspection_runs 增 9 个 map 相关列 + run_kind 索引;inspection_node_results 增 node_kind;
  新建 inspection_marks 表(run/status/type 索引)
- MigrationColumns + ApplySchemaMigrationsAsync 覆盖全部新列(ALTER TABLE ADD COLUMN,旧库无损升级)
- BeginRun/AppendNodeResult 写入新列;QueryRuns 加 map 列投影 + run_kind 默认过滤;
  GetRunDetail 加载 map 列 + Marks + Events
- 新增 UpdateRunMapAsync(并入 Map 元数据)、SaveMarkAsync/RemoveMarkAsync/
  RemoveMarksByRunAsync/QueryMarksAsync(inspection_marks 读写)
- WriteManifest 由 Capture 节点派生 Batch 段、强制 SchemaVersion=2
- BuildAssetRelativePath 改为经 IInspectionAssetPathResolver 拼接(零行为变化)
- 接口 IInspectionResultStore 同步新增上述方法
feat(inspection-archive): 新增统一归档门面 IInspectionArchiveService

- 委托 InspectionResultStore + InspectionMapStore,统一暴露运行生命周期、检查图/总览、
  多点采图、标记入口,不重写底层归档语义
- 运行生命周期:BeginRun/AppendNodeResult/CompleteRun/AppendRunEvent/QueryRuns/
  GetRunDetail/UpdateRunMap
- 多点采图:AppendCaptureNodeAsync(写 node_kind='Capture' 节点 + NodeInputImage 资产,
  pipeline 占位、无 metrics/快照)
- 标记双写:SaveMarkAsync 先写 DB(权威)再写 .xpmap 快照,写快照失败记 RunError 事件、
  不回滚 DB、不阻塞;RemoveMarkAsync DB+xpmap 同步;QueryMarksAsync 以 DB 为权威源
- 检查图/总览:LoadMap/SaveMap/SaveOverview/SaveMarkSnapshot
- IInspectionAssetPathResolver 接口/实现(统一相对路径拼接,Store 与 MapStore 共用)
refactor(inspection-doc): MapStore/文档服务接入统一路径解析与归档门面

- InspectionMapStore.SaveAssetAsync/SaveMarkSnapshotAsync 改为经 IInspectionAssetPathResolver
  拼接路径(零行为变化)
- InspectionDocumentationService 依赖改为 IInspectionArchiveService(SaveOverview/SaveMarkSnapshot)
- InspectionRunDocumentationContext 人工检查运行设 RunKind=ManualDocumentation(支持默认过滤)
refactor(cnc): CNC 执行改走统一归档门面,多点采图接管并下线 CapturedImages/summary.json

- 依赖由 IInspectionResultStore 改为 IInspectionArchiveService(BeginRun/AppendNodeResult/CompleteRun)
- SavePositionNode 采图改走 AppendCaptureNodeAsync(Capture 节点 + NodeInputImage 落盘)
- 停止写 CapturedImages/ 与 summary.json(旧目录只读兼容);移除 batchResult/summary 相关死代码
- IImagePersistenceService 降级为独立工具,不再作为 CNC 输出路径(构造参数保留以兼容既有调用)
chore(di): 注册资产路径解析器与归档门面单例

- 注册 IInspectionAssetPathResolver→InspectionAssetPathResolver(单例)
- 注册 IInspectionArchiveService→InspectionArchiveService(单例,位于两个 Store 之后)
test(inspection-archive): 融合归档测试补齐与旧测试适配

- 新增 InspectionArchiveServiceTests:标记双写一致性、查询过滤、失败降级、3 点采图集成、
  manifest v2 往返(中文明文/相对路径/SchemaVersion=2/Marks/Batch)、v1 缺段兼容
- InspectionResultStoreTests:新列默认值、node_kind 默认、UpdateRunMap 往返、
  run_kind 默认过滤、旧库迁移无损
- 迁移 CNC 相关测试的 mock 由 IInspectionResultStore 改为 IInspectionArchiveService
- 重写 MultiPositionIntegrationTests(断言 run 目录/manifest.Batch,保留 ImagePersistenceService 独立工具测试)、
  SummaryCorrectnessPropertyTests(校验 Capture 节点归档)、ImagePersistenceCallPropertyTests(校验
  AppendCaptureNodeAsync 调用)、CancellationSummaryPropertyTests(校验取消以 Stopped 收尾)
docs(spec): 勾选 tasks 并补充实现落地偏差与迁移说明

- tasks.md 勾选阶段 1–8
- design.md 追加 §九:实现偏差(资产路径含前缀、Batch 由 Capture 派生的语义、
  IImagePersistenceService 降级、SchemaVersion 默认值等)、无损迁移说明、既有测试欠债说明、构建说明
2026-07-02 21:28:16 +08:00
zhengxuan.zhang 1f8a0f0a02 改为右键菜单来控制显示,直方图和信息控件的控制 2026-07-02 18:12:38 +08:00
zhengxuan.zhang ae8b14b956 按 Views 的层级对齐了相关 ViewModel 位置 2026-07-02 18:06:54 +08:00
zhengxuan.zhang b0b986ea1c 修复录制设置弹窗显示不全 2026-07-02 17:55:39 +08:00
zhengxuan.zhang c418515a05 Ribbon 里把“录制范围 / 录制 / 暂停继续 / 秒表”放进同一个录制面板,看起来有关联了。
录制时会显示红色边框:选择“图像区”:只框住实时图像区域。
选择“整个页面”:框住整个应用页面。

新增暂停/继续:暂停时停止抓帧,保留当前录制文件和编码队列。
继续时恢复抓帧。
秒表不计算暂停时间。

录制按钮现在可用于开始/停止,暂停按钮用于暂停/继续。
2026-07-02 15:59:58 +08:00
zhengxuan.zhang 886551420e fix: 修复录制启动无响应并调整显示控件入口
- 将录制目标事件改为同步强引用订阅,避免点击录制后未回传 captureTarget
- 增加录制启动失败提示,并让录制状态消息显示到底部状态栏
- 调整 Ribbon 中录制范围、显示设置和增强按钮的位置
- 隐藏已迁移为视口叠加层的工具箱算子
- 更新直方图显示配色
2026-07-02 15:47:44 +08:00
zhengxuan.zhang a2f606d2f2 新增显示设置对话框,控制直方图和信息叠加的显示 2026-07-02 15:31:40 +08:00
zhengxuan.zhang 879f19d90d feat: 将直方图/信息控件从流水线虚拟算子改造为视口级显示功能
- 新增 Ribbon"显示叠加"按钮 + OverlayDisplaySettingsWindow 弹窗,
  支持实时开关直方图/信息控件叠加层及设置显示位置
- 新增实时图像区右键菜单"直方图""信息控件"二级子菜单(显示开关+位置选择)
- 删除流水线虚拟算子机制(AddHistogramNode/AddInfoOverlayNode 及相关方法)
- 删除 ToggleHistogramEvent/HistogramPropertyChangedEvent/InfoOverlayPropertyChangedEvent
- 删除 EditorModeChangedEvent(上轮过渡方案)
- 清理 OperatorToolboxViewModel 中"信息控件"条目及模式感知代码
- 清理 ViewportPanelViewModel 中已废弃的命令和事件订阅
- 清理 PipelineEditorView 中死代码(空事件订阅/HistogramToggleBtn_Click/死按钮)
- 加载旧 .xpm 时静默跳过残留的 Histogram/InfoOverlay 虚拟节点(兼容)
- IPipelineEditorHostViewModel 移除 AddHistogramNodeCommand 成员
- 两种模式(图像处理/CNC编排)下均可通过视口级UI控制叠加层
2026-07-02 15:14:49 +08:00
zhengxuan.zhang b631fb5f50 十字线按钮:点击启用 → 预览区中心显示红色十字线(覆盖整个预览区),再次点击关闭。
移动定位线按钮:点击启用 → 鼠标在图像上滑动时显示蓝色十字线辅助定位,鼠标离开或关闭按钮即隐藏;无论实时还是非实时都生效。
两条线相互独立,可单独或同时开启。
2026-07-02 13:07:49 +08:00
zhengxuan.zhang 6dd231c76e 标记属性页面布局优化 2026-07-02 11:18:09 +08:00
zhengxuan.zhang b5fffaa115 将直方图和信息控件,在图像工具箱中新增一个分类为显示控件分类 2026-07-02 10:43:11 +08:00
zhengxuan.zhang 8d9ccae540 修复PipelineEditorView 新增分割线和滑块被裁剪的问题 2026-07-02 10:30:12 +08:00
zhengxuan.zhang 9a10482d8e 直方图控件填充为蓝色;修复CNC属性面板内控件显示不全的问题 2026-07-02 10:12:11 +08:00
zhengxuan.zhang 779ad6c4b7 1. ROI 属性缺失(真实缺陷,DataItem=PipelineEditorViewModel) 共享视图 PipelineEditorView.xaml 里绑定了 ROI 相关成员,但这些只在 CNC 宿主 CncInspectionModulePipelineViewModel 实现了,独立的 PipelineEditorViewModel 没有。
在 IPipelineEditorHostViewModel 接口补齐契约:SelectedNodeIsAdvancedModule、SelectedNodeRoiSummary、IsRoiEditing、EditRoiCommand、FinishRoiCommand、ClearRoiCommand。
在 PipelineEditorViewModel 提供空实现(SelectedNodeIsAdvancedModule => false,命令恒不可执行)。独立编辑器不支持高级模块 ROI,ROI 区域会始终折叠,行为不变,仅消除绑定错误。命令用公共属性而非显式接口实现,以便 WPF 反射绑定能找到。
2. 启动瞬时错误(DataItem=CncEditorViewModel) InspectionModulePipelineEditor 的 DataContext 在 code-behind 的 OnLoaded 才赋值,加载初期继承了父级 CncEditorViewModel,导致一批瞬时绑定失败。

在 CncPageView.xaml 给该控件显式设置 DataContext="{x:Null}"。DataContext 为 null 时 WPF 不报“属性未找到”,随后 OnLoaded 会填入真正的宿主 VM,最终状态不变。
3. Telerik 电子表格示例遗留绑定(DataItem=MainViewModel) MainWindow.xaml 中“识别定位”RadRibbonGroup 残留了 Telerik 示例的 ShowFormatCellsDialog/AlignmentGroup 绑定(ScreenTip 还写着 "Format Cells dialog box"),MainViewModel 并无这些属性。

参照同文件上方已修复的那组,移除命令绑定,DialogLauncherVisibility 设为 Collapsed、IsEnabled 设为 True。(MainWindowB.xaml 已从项目排除,未动。)
2026-07-02 08:44:55 +08:00
zhengxuan.zhang 2377e944a1 主要处理了容器未初始化的问题:
[CncPageView.xaml (line 15)](D:/XplorePlane/XplorePlane/Views/Cnc/CncPageView.xaml:15):把 prism:ViewModelLocator.AutoWireViewModel 改为 False,避免设计器直接触发 Prism 容器解析。
[CncPageView.xaml.cs (line 33)](D:/XplorePlane/XplorePlane/Views/Cnc/CncPageView.xaml.cs:33):OnLoaded 增加设计时判断,Designer 模式直接返回。
[PipelineEditorView.xaml.cs (line 30)](D:/XplorePlane/XplorePlane/Views/ImageProcessing/PipelineEditorView.xaml.cs:30):构造函数和 OnLoaded 都加了设计时保护,避免第 873 行嵌入的 PipelineEditorView 在设计器里访问 ContainerLocator.Current。
2026-07-01 18:00:13 +08:00
zhengxuan.zhang d309efacf3 已修复 iText CJK 字体资源加载异常相关问题。
改动在:
[XP.ReportEngine.csproj](D:/XplorePlane/XP.ReportEngine/XP.ReportEngine.csproj):直接引用真实资源包 itext.font-asian,并只复制 itext.font_asian.dll 到输出目录,避免之前全量复制依赖带来的运行时探测噪音。
[ITextPdfRenderer.cs](D:/XplorePlane/XP.ReportEngine/Services/ITextPdfRenderer.cs):启动时精确注册 itext.font_asian 资源程序集,优先使用已加载程序集,其次从输出目录加载,确保 iText 能找到 CJK/CMap 资源。
2026-07-01 17:23:59 +08:00
zhengxuan.zhang 9f7d50649a 统一解决方案 x64 debug模式和release模式 2026-07-01 17:04:37 +08:00
zhengxuan.zhang 876ca83774 问题总结与修复说明
根本原因
DumpService.Start() 只在 CommonModule.OnInitialized() 中调用,而该方法在 CreateShell() → InitializeModules() 期间才执行。启动链前半段(RegisterTypes、模块加载)期间若发生未处理异常,dump 文件不会被生成,只有日志和 MessageBox。

做了什么
1. App.OnStartup() — 提前启动

在 ConfigureLogging() 之后立即调用 StartDumpServiceEarly(),直接 new 出 DumpService(SerilogLoggerService 无参构造函数直接用已初始化的 Log.Logger),然后调用 Start()。此时整个启动链都在 dump 保护范围内了。

2. AppBootstrapper.RegisterTypes() — 实例注入

将提前创建的实例通过 RegisterInstance<IDumpService> 注入 DI 容器,这样 CommonModule.OnInitialized() 解析到的是同一个实例,调用 Start() 时因 _isStarted = true 直接返回,不会创建第二个实例也不会重复订阅事件。
2026-07-01 15:17:33 +08:00
zhengxuan.zhang cb7f679bc1 Merge branch 'Develop/XP' into Feature/TURBO-002-Cnc 2026-07-01 13:12:56 +08:00
zhengxuan.zhang b5a200c3e8 界面优化 :
1、优化标记属性页面 √;

2、导航页面布局;√
   保存导航图照片
   载入 Map
   保存 Map
   保存报告
   显示标记图样
   删除所有的标记图样
   自动检测时软件自动标记图样

3、按钮激活时背景色 √
2026-07-01 11:45:26 +08:00
zhengxuan.zhang f1465a6843 导航栏现在压缩为一行,左侧“导航”文字本身就是下拉按钮,IMG / MAP / PDF 放在同一行右侧;图片区域和状态栏也上移,原来的三行视觉结构改成了一行导航 2026-06-30 22:55:41 +08:00
zhengxuan.zhang 27fdc275b7 按钮激活时背景色;导航下拉;标记属性页面的优化 2026-06-30 22:35:35 +08:00
zhengxuan.zhang 5d2a61dc0e 快捷按钮区高亮功能,Ribbon"图像工具"组中的"辅助线"按钮从 RadRibbonButton 改为 RadRibbonToggleButton,双向绑定 IsCrosshairVisible 2026-06-30 18:11:50 +08:00
QI Mingxuan ee0d900e6c [XP.Hardware.Detector] 修复原生 DLL 引用路径,改为从 ExternalLibraries 目录引用 xisl.dll 和 FpdSys.dll。 2026-06-30 17:40:13 +08:00
zhengxuan.zhang bd55eca5b3 初步的标记功能 2026-06-30 17:30:11 +08:00
zhengxuan.zhang 78ff748953 调整主界面CNC编排区域背景颜色 2026-06-30 17:11:05 +08:00
zhengxuan.zhang 1f08967b58 1. 修复绑定错误(所有 property not found 错误)
问题原因:PipelineEditorView 启用了 Prism 自动 ViewModel 创建 (AutoWireViewModel=True 默认值),这导致它自动创建了一个 PipelineEditorViewModel,但实际上在 CNC 编辑器页面中,PipelineEditorView 需要使用 CncInspectionModulePipelineViewModel 作为 DataContext(由 CncPageView 在 code-behind 中创建并设置)。

修复:在 PipelineEditorView.xaml 添加:

xmlns:prism="http://prismlibrary.com/"
prism:ViewModelLocator.AutoWireViewModel="False"
禁用自动创建 ViewModel,确保 DataContext 使用 code-behind 设置的正确对象。

2. 修复显示不全
问题原因:CncPageView.xaml 最外层 Border 原本设置了固定宽度 Width="620" 并且 HorizontalAlignment="Left",这导致在 CNC 编辑器窗口(默认宽度 1040px)中,整个右侧面板只占用 620px 靠左对齐,剩余空间空白,内容显示不全。

修复:

移除固定宽度 Width="620",保留 MinWidth="620"
HorizontalAlignment="Left" → HorizontalAlignment="Stretch"
为 PipelineEditorView 添加 VerticalAlignment="Stretch" 确保垂直填满
2026-06-30 16:50:49 +08:00
zhengxuan.zhang 64e3eb6bd4 修复手动指定图的优先级
核心原因是:CNC 运行/编辑计算时,主预览区可能被切回实时图源;如果此时没有实时帧,预览区就空了。同时检测模块编辑预览没有优先读取“位置1”里手动指定的输入图。
改动:
[CncExecutionService.cs (line 199)](D:/XplorePlane/XplorePlane/Services/Cnc/CncExecutionService.cs:199)
SavePositionNode 加载手动图像成功后,立即用 SetCncResultImage 推送到图像预览区,避免 CNC 运行中 SetManualImage 被拦截。
[CncInspectionModulePipelineViewModel.cs (line 554)](D:/XplorePlane/XplorePlane/ViewModels/Cnc/CncInspectionModulePipelineViewModel.cs:554)
检测模块编辑计算时,优先查找当前检测模块前面的最近 SavePositionNode.ManualImagePath,加载该图片作为计算输入,并同步显示到预览区。找不到手动图时才回退到当前预览图/手动图
2026-06-30 16:14:11 +08:00
zhengxuan.zhang 053da2a8a3 新增区域截图功能 2026-06-30 16:00:12 +08:00
zhengxuan.zhang 496e4da90e Merge branch 'Develop/XP' into Feature/TURBO-002-Cnc 2026-06-30 15:09:33 +08:00
QI Mingxuan f6d7ee4292 已合并 PR 138: Hamamatsu射线源集成合并 2026-06-30 15:01:34 +08:00
QI Mingxuan 5d9622f286 Merged PR 140: 新增对倍福Beckoff PLC的调研集成文档,为集成倍福PLC做准备。
新增对倍福Beckoff PLC的调研集成文档,为集成倍福PLC做准备。
2026-06-30 15:01:24 +08:00
ZHANG Zhengxuan 91aa282aef 已合并 PR 137: 累计功能点更新
1、实时图像区背景改 棋盘格;右键增加 缩放比例的选择; √
 2、SavePosition 节点属性区域现在依次是:运动参数 → 射线源(电压/电流)→ 设定参数(保存图像/手动路径) √  值的获取与记录 √
 3、十字线绘制范围的调整,改为填充整个图像预览区域 √
 4、优化登录窗体 增加登录级别的选择 √
 5、软件版本页面 分析项目依赖,移除未使用的库 √
6、直方图节点统一,使用 算子工具箱
7、cnc增加一个复位按钮操作,当插入CNC时,可以进行复位  √
8、信息显示控件 √
9、实时模式下禁止 图像预览区的图像拖动,前期已经禁止缩放,目前禁止拖动 √
10、开关闭实时,鼠标在图像上滑动显示蓝色的十字线 √

![image.png](http://cntao-ap-v83/HMQ-Solution/7ff128fd-5cc6-4feb-9529-2a03b2895662/_apis/git/repositories/e2c5485f-4369-4ed9-9fb9-d087ca4e04b6/pullRequests/137/attachments/image.png)
2026-06-30 15:00:09 +08:00
QI Mingxuan 2657393f5a 已合并 PR 139: 探测器XP.Hardware.Detector 集成 iRay 平板探测器SDK
探测器XP.Hardware.Detector 集成 iRay 平板探测器SDK
- 新增 iRay 专有配置属性:WorkDir、ConnectTimeoutMs、AcquisitionTimeoutMs、CorrectionTimeoutMs、ImageBufSizeBytes、DefaultAppModeSubset
- 使用官方 iDetector.SdkInterface:IRayFpdSys.cs、IRayCmdDef.cs、IRayAttrDef.cs、IRayEventDef.cs、IRayErrDef.cs、IRayVariant.cs 等
- 实现初始化、连续采集、单帧采集、四类校正(暗场/增益/坏像素/一键自动)、参数应用、资源释放
- 启用 DetectorType.IRay 工厂分支,实现 CreateIRayDetector 方法
- 添加 FpdSys.dll 的 CopyToOutputDirectory 引用
2026-06-30 14:59:56 +08:00
zhengxuan.zhang b11e498a13 气泡检测结果.txt文件,要记录到CNC运行结果的 manifest.json; 2026-06-30 14:42:02 +08:00
TANG Haowei 05120c776d Merged PR 136: 仿照Yxlon开发校准界面,关联校准算法
#:仿照Yxlon开发校准界面,关联校准算法
2026-06-30 14:42:02 +08:00
zhengxuan.zhang 0d497e622e Merge branch 'Develop/XP' into Feature/TURBO-002-Cnc 2026-06-30 14:05:35 +08:00
zhengxuan.zhang 7f2dd8f822 修复实时模式下图像预览区仍可拖动的问题;非实时模式下鼠标跟随蓝色十字线功能 2026-06-30 13:51:21 +08:00
zhengxuan.zhang e86d2381e8 修复直方图的无数据源的问题 2026-06-30 13:44:01 +08:00
zhengxuan.zhang 982179db24 增加CNC运动复位指令 2026-06-30 13:03:53 +08:00
zhengxuan.zhang 9c2143f366 修复直方图显示 2026-06-30 11:44:02 +08:00
zhengxuan.zhang 9153570713 新增信息控件功能 2026-06-30 11:21:27 +08:00
Tanghaowei 8e1ac8df86 #:仿照Yxlon开发校准界面,关联校准算法 2026-06-30 11:12:22 +08:00
zhengxuan.zhang ab30e435bc 优化直方图控件,增加显示位置的属性; 修复算子工具箱发现逻辑;
1. ImageProcessorBase.cs — 新增 GetParametersDictionary() 公开方法,让适配器可以共享内部算子的参数字典引用。

2. ImageProcessingService.cs — 新增 ByteToUshortProcessorAdapter 类和发现逻辑:

适配器 (ByteToUshortProcessorAdapter): 包装一个 byte 算子为 ushort 接口。处理流程是 16 位输入 → 右移 8 位降到 byte → 委托给内部 byte 算子 → 结果 ×257 升回 ushort。参数字典和 OutputData 直接共享引用,外部 SetParameter 直接生效。
发现逻辑:DiscoverProcessors 现在分两遍扫描:
第一遍:原有逻辑,找原生 ushort 和泛型算子
第二遍:找 byte-only 算子(继承 ImageProcessorBase<byte> 且不可赋值给 ImageProcessorBase<ushort>),用适配器包装后注册。如果 key 已被第一遍注册则跳过(泛型版本优先)
2026-06-30 11:11:50 +08:00
LI Wei.lw c9af135b1b 已合并 PR 133: 支持16位图像处理
1.算子库泛型升级 — 50个算子升级为泛型,同时支持 8位/16位灰度图像处理
2.修复编译错误 — 修复算子泛型化后主程序调用点的编译错误
3.还原 .gitignore — 还原 Doc/ 目录的忽略规则
4.修复算子发现 — 修复泛型算子和 ImageProcessorBase<byte> 子类无法被反射发现的问题
5.检测算子统一为16位 — BGA/Void/QFN/模板匹配统一改为 ImageProcessorBase<ushort>
6.主框架重构 — 统一16位处理路径,删除双注册表
7.UI层适配 — 三个检测工具适配16位,滑条范围改为 0-65535
2026-06-30 11:00:19 +08:00
zhengxuan.zhang 09b72e58bb 版本说明中移除未使用的库 2026-06-30 09:22:21 +08:00