Vyntek
规格机器视觉规格

测试契约摘录:TC-DISP-*(Arden · R12)

www 工作副本 · M5 摘录(Arden · 2026-10-21 Asia/Shanghai)
双轨:本页为 test-contracts.md §11 的 www 摘录(仅 TC-DISP-01…12 / S13)。完整 TC-* 表仍在 mvdocs;整篇迁入属编排波以后——本波不开 toolflow / host-integration / 完整 test-contracts。
语义权威:image-display.md;显示契约仅 C#;勿与 T15 R10(C++ UI·已关闭)互替。停止矩阵权威仍为 toolflow §7.4.3(T9,不改)。
实现对拍:见下文;对照 tip e46c042(已提交;Arden 不改 include/ / src/ / bindings/)。
相关:csharp-binding · 控件对照 · TC-ACQ · 预览 http://127.0.0.1:8792

11. 显示集成 TC-DISP-*(阶段 F · Arden · R12)

语义权威见 image-display.md。显示契约仅 C#(控件封装 / UI 层);像素经绑定自 C++ vyntek::imaging。勿写成 C++ UI。本表只做可勾选断言。不改 Diagnostic / T9 停止矩阵与 toolflow v1.9。场景骨架 S13。交叉:显示只观察见 TC-CTL-05(不扩 T9)。

ID勾前置动作期望 code / 状态对应章节场景
TC-DISP-01[ ]UI 线程;合法 IPixelImage(稳定或可写)SetImage / Source 登记同步取得独立 Share 并返回 ImageDisplayUpdate;不承诺已 OpenRead/已安装;可写输入须后台授予时才捕获image-display「请求登记与读取授予」S13
TC-DISP-02[ ]调用方持有有效图像;可多控件同图SetImage 成功后调用方 Dispose/Close 自有 handle;或另一控件再 SetImage 同图控件 不接管、不 Dispose 调用方传入 handle;Source 仅引用非所有权转移;Share 延长稳定内容寿命image-display「多窗口与所有权」S13
TC-DISP-03[ ]已以 RetainInput(默认)安装可写原图企图对同一 Buffer 原地 OpenWrite / 写入显示快照持稳定读 → 原地写入等待控件及其他读者退出;属性改 InputRetention 不偷偷改当前已装内容存储image-display「输入保留与显示副本」S13
TC-DISP-04[ ]以 Snapshot 提交并完成安装等待 InputReleased 后对原图写入;屏幕仍可显示旧图InputReleased 后控件不再阻止原图写入;Source 不因释放而置空;刷新须再次 SetImageimage-display「输入保留与显示副本」S13
TC-DISP-05[ ]当前为 RetainInput 已装 / 或在途候选update.DetachInputAsync;含预算不足路径成功 → Released 且 InputReleased 已完成,公开 CurrentImageInfo/CurrentVersion 保持来源身份;CpuBudgetExceeded → 不破坏当前内容及原图读取,可重试image-display「脱离和清空」S13
TC-DISP-06[ ]一次成功/失败更新在途分别观察 Completion、InputReleased、ImageRendered、底层 ReturnCompleted四信号互不等价:Installed ≠ Rendered;InputReleased 可先/后于 Completion;ImageRendered 可重复或从未发生;ReturnCompleted 属 SDK/owner 归还,≠ 控件 InputReleasedimage-display「回执、绘制和输入释放」S13
TC-DISP-07[ ]控件已有已装旧画面新请求 Failed(含 VersionMismatch / ReadFailed / UnsupportedImage 等)保留旧画面;失败回执 Info/Version 为空、带 Failure;不得让新 Source 信息与旧画面混合image-display「内部显示快照」/「回执」S13
TC-DISP-08[ ]当前已装 Gray8 / Rgb24 / Bgr24 / Depth16 之一TryGetPixel → TryGetGray8/Rgb24/Bgr24/Depth16仅格式相符时成功;无隐式跨格式转换;Depth 无效码仍可 TryGetDepth16(IsValid=false);TryGetDepthMeters 仅尺度已声明且有效时成功image-display「多格式像素查询」S13
TC-DISP-09[ ]已装含 ROI 偏移和/或负步长的图像TryGetPixel(viewPosition, …)按控件逆变换到逻辑像素坐标(ROI 内 X/Y);负步长/ROI 由临时读取封装处理;禁止用 viewPosition 直接作缓冲偏移;界外 → falseimage-display「多格式像素查询与坐标」S13
TC-DISP-10[ ]有在途候选/已装内容;含隐藏或零尺寸卸载控件;随后重挂载仍有效 Source;或图形 context 重建卸载:取消候选、清 UI 快照、通知 render 退出,安全排空异步完成(不 UI 同步死等);重挂载 = 新请求,不复用已失效读取;context 重建从显示副本/快照恢复,不改公开来源身份image-display「内部显示快照」/「多格式渲染」S13
TC-DISP-11[ ]已装旧图;新请求将超 CPU/GPU 预算SetImage / Snapshot 复制 / Detach 复制致预算不足登记 Failed(如 CpuBudgetExceeded);释放本次取得的引用;保留旧画面;不先丢旧图凑预算;无自动重试队列image-display「预算、线程与资源归还」S13
TC-DISP-12[ ]Run 在途或已结束;显示已挂卸图 / ClearImageAsync / Dispose ImageDisplay / 关显示宿主显示只观察:不停编排、不 RequestCancel、不停相机(交叉升格/对齐 TC-CTL-05;不扩 T9)image-display 文首 T9;toolflow §7.4.3;TC-CTL-05S13 / S05 / S07

实现对拍状态(tip e46c042 · 按实 · 可勾选处)

上表 [ ] 保持未勾。外形 ≠ 验收。bindings tip 769d997。

TC声明外形(bindings · HEAD)实现对拍状态缺口归属
TC-DISP-01SetImage → Share → 后台 OpenRead → ImageDisplayUpdate管线外形有;未标验收Rhett
TC-DISP-02Share 不接管调用方;Dispose 调用方 ≠ Dispose 控件 share路径在;多控件同图 未验收Rhett
TC-DISP-03/04InputRetention RetainInput / Snapshot + InputReleased枚举与安装路径在;时序 未验收Rhett
TC-DISP-05DetachInputAsync;RetainInput 复制可 CpuBudgetExceeded预算失败路径有;成功脱离 未验收Rhett
TC-DISP-06四回执分开;不假 ReturnCompleted;无头不发 ImageRendered约定在代码;时序 未验收Rhett · Bruno
TC-DISP-07OpenRead 失败释放候选、保留已装帧路径在;未验收Rhett
TC-DISP-08TryGet* 仅格式相符;Depth16 IsValid 来自 native逻辑坐标外形有;未验收Rhett
TC-DISP-09TryGet*AtView + Origin;负步长只作元数据映射外形有;未验收Rhett
TC-DISP-10Unload 清快照留 Source;Remount 新请求外形有;无图形 contextRhett
TC-DISP-11CpuBudgetLimitBytes;失败保留旧画面账本外形有;未验收Rhett
TC-DISP-12Clear/Dispose/Unload 不 RequestCancel控件路径观察-only;宿主交叉未测Rhett · Chase

场景骨架 S13(完整文仍在 mvdocs examples-scenarios):

| S13 | TC-DISP-01…12;交叉 TC-CTL-05 | 登记≠授予;Share 不接管;Retain/Snapshot/Detach;四回执;失败保留;四格式;ROI;卸载;预算;显示只观察 | S13;image-display;Arden · R12(仅 C#;≠ T15 R10) |

摘录状态:2026-10-21 Asia/Shanghai · bindings tip 769d997。完整 test-contracts / toolflow / host-integration 不在本波。

On this page