Files
AnyImage/openspec/changes/repair-image-edit-pipelines/tasks.md
nan 1994d38ccd Add comprehensive tests for image processing and mask functionalities
- Introduced tests for color image handling, ensuring source preservation and premultiplied alpha usage.
- Implemented tests for brush stroke operations, validating segment boundaries and brush anti-aliasing.
- Added tests for frame anti-aliasing, confirming correct rendering behavior with various alpha values and depth settings.
- Created tests for frame projection, ensuring accurate overlap calculations and half-plane clipping.
- Developed tests for image premultiplied retention, verifying behavior during loading and packing processes.
- Added undo functionality tests for mask operations, ensuring single transaction behavior during edits.
2026-09-05 21:33:11 +08:00

3.6 KiB
Raw Blame History

1. 源像素读取完整性(审查 1)

  • 1.1 增加真实 bpy 回归,覆盖读取前后 pixels、alpha_mode、is_dirty、packed bytes 和共享 users,确认当前 dirty PREMUL 样例能复现内容丢失。
  • 1.2 明确 byte/float、GENERATED/FILE、dirty/clean、packed/unpacked 的读取分支,实现无源副作用的业务 RGBA 读取;以当前脏像素优先及原生浮点 PREMUL 样例验证数值语义。
  • 1.3 验证独立解码副本在成功与异常时释放,并完成 Mask Subtract → Pack → 保存重开 → Mask Add、重复 Frame 及共享源取消回归,确认透明 RGB 和结果 PREMUL 默认值保留。

2. 公共裁剪与 Frame 交叠(审查 2、8)

  • 2.1 在 common/selection.py 收敛二维半平面裁剪,用矩形完全包含、相离、边接触和退化多边形测试验证统一边界行为。
  • 2.2 改为在源单位矩形上按透视深度与 Frame 齐次边界裁剪,验证 30° 倾斜、深度 0.2、焦距系数 1/1.7/2/4 的交叠与采样一致,并覆盖极近前方、正交负深度和无效交叠。
  • 2.3 Rectify 复用公共裁剪并删除本地重复算法,运行四角规范化、部分交叠和图片外四边形测试,确认输出范围和放置语义保持一致。

3. Brush 路径与覆盖(审查 3、4)

  • 3.1 保留原始手势采样并实现整段误差受限的简化,使用弯曲密集采样检查每个原始点到对应简化段的距离不超过 0.75 px,回归 Lasso 与 Polyline 顶点行为。
  • 3.2 以联合局部 bounds 合并 Brush 硬覆盖,并复用公共抗锯齿处理完整并集一次;用半径 2/5/25 的直角、自交和等价分段样例验证覆盖一致及接缝消除。
  • 3.3 验证预览与提交消费同一路径和 footprint,检查拖动期间没有 RGBA 读取或图片级计算,释放后只有一次 Packed 结果提交。

4. 增量预览与状态清理(审查 6、9)

  • 4.1 建立固定屏幕扫描行的已确认前缀缓存及活动尾段,局部更新覆盖、填充和外轮廓;逐次与全量参考对比回折、自交、尾段变化和图元重叠结果。
  • 4.2 静止重绘复用 GPU batch,按变化块更新绘制;记录 800/1600/3200 点的基线与更新耗时,并用计算范围检查确认局部新增段不会重算完整历史。
  • 4.3 合并填充和轮廓缓存标记,删除 _region_size 与仅测试调用的 scanline_fill_triangles、preview_fill_triangles 转发入口;通过全仓引用搜索和当前预览入口测试验证清理完整。
  • 4.4 统一完成、取消、异常和工具切换的路径及预览资源释放;以资源计数、原 Image 引用和连续启动新手势验证没有残留状态。

5. Mask 提交与 Frame 输出简化(审查 5、7)

  • 5.1 移除 Mask REGISTER 与无效重做 draw,保留 Scene 设置和 UNDO;检查 Blender 类型注册/注销,并验证三种手势完成后的单步撤销及设置冻结。
  • 5.2 Frame 直接写入独立 RGB/Alpha,删除 blended_rgb 整图备份和被覆盖的颜色转换链;用透明底色、半透明前景、源外全零、极小 Alpha 与不同分块高度测试验证结果一致。

6. 整体回归

  • 6.1 运行 uv run pytest,覆盖 Image Edit、Cutout、Plane、Job 颜色加载和打包内容测试;确认全部通过,并核对本轮已有失败探针均成为通过的回归。
  • 6.2 审查最终 diff,确认九项发现均有对应修复与验证、无旧转发入口或重复裁剪;实施改动限于代码、测试及本提案任务状态,不产生产品文档或构建产物。