完美像素产物会缩放到与原图相近的尺寸;提高识别小网格的倾向 #172

Merged
kdletters merged 16 commits from feat/pixel_art into master 2026-08-21 11:19:18 +08:00
Owner
No description provided.
lhk229 added 2 commits 2026-08-15 18:30:26 +08:00
snapper 在采样后、编码前按单一整数 N 做 nearest 放大,保持逻辑图宽高比
生成 pixelArt 与手动完美像素共用该输出,禁止非整数拉回精确源尺寸
手动入口算法指纹升级为 perfect-pixel-v3
同步现役文档与决策记录,并更新被新尺寸带崩的旧断言
修正手动完美像素文档仍写成同尺寸
Project CI / Repository checks (pull_request) Has been cancelled
Project CI / Frontend tests (pull_request) Has been cancelled
Project CI / Backend tests (pull_request) Has been cancelled
Project CI / Native shell tests (pull_request) Has been cancelled
b885a2564e
将画布编辑器方案中手动派生结果从同尺寸 PNG 改为整数倍放大后的 PNG
写明宽高比等于逻辑图,尺寸接近但不保证等于源图
lhk229 added 1 commit 2026-08-15 18:30:42 +08:00
Merge remote-tracking branch 'origin/master' into feat/pixel_art
Project CI / Native shell tests (pull_request) Has been cancelled
Project CI / Frontend tests (pull_request) Has been cancelled
Project CI / Backend tests (pull_request) Has been cancelled
Project CI / Repository checks (pull_request) Has been cancelled
a9c8349e1c
lhk229 added 1 commit 2026-08-15 18:32:45 +08:00
Merge remote-tracking branch 'origin/master' into feat/pixel_art
Project CI / Repository checks (pull_request) Has been cancelled
Project CI / Frontend tests (pull_request) Has been cancelled
Project CI / Backend tests (pull_request) Has been cancelled
Project CI / Native shell tests (pull_request) Has been cancelled
484282eb43
lhk229 added 1 commit 2026-08-15 18:35:29 +08:00
Merge remote-tracking branch 'origin/master' into feat/pixel_art
Project CI / Repository checks (pull_request) Successful in 54s
Project CI / Backend tests (pull_request) Successful in 4m2s
Project CI / Frontend tests (pull_request) Successful in 3m14s
Project CI / Native shell tests (pull_request) Successful in 17m9s
39cc8ca1e8
Author
Owner

[P2] 整数倍放大阶段的 deadline 检查粒度不足
pixel_art_snapper.rs (line 446) 只按逻辑图像素检查 deadline,实际写入放大后的物理像素位于后面的双重循环中。
例如逻辑图为 3×3、放大倍数接近 960 时,会写入约 830 万个像素,但只检查 9 次。若 deadline 在放大过程中到期,任务会先完成整段复制,最后才在 346 行发现超时;外层 spawn_blocking + timeout_at 可能已经放弃等待,而 CPU permit 仍被后台任务占用。建议按输出像素或按固定行/块粒度检查 deadline。

注意这是假缺陷。
对比后,该问题不是 c2cfe4ff0 首次引入的回归,而是 aa5c857060 已存在的 deadline 语义风险。

aa5c857060 当时的实现是:

deadline.check("最近邻尺寸恢复")?;
let delivered = resize_nearest(&logical, rgba_image.width(), rgba_image.height());
deadline.check("PNG 编码")?;

也就是说,整个 imageops::resize 本身不可中断,只在前后检查 deadline。该版本甚至没有放大过程中的任何检查。

当前分支改成了自有整数倍循环:

pixel_art_snapper.rs:446

deadline.check_iteration(pixel_index, "整数倍放大")?;

它至少会按逻辑像素检查,但当逻辑图很小、整数倍很大时,内层 scale × scale 写入仍可能长时间没有检查。因此:

  • 作为“新增代码的预算检查不够细”仍然成立;
  • 但作为本分支相对 aa5c857060 的新回归,不成立;
  • 当前实现相较旧版是部分改善,风险应降为继承的性能/超时边界问题,而不是阻断性缺陷。
[P2] 整数倍放大阶段的 deadline 检查粒度不足 [pixel_art_snapper.rs (line 446)](C:/projects/narrative/Genarrative/server-rs/crates/platform-image/src/pixel_art_snapper.rs:446) 只按逻辑图像素检查 deadline,实际写入放大后的物理像素位于后面的双重循环中。 例如逻辑图为 3×3、放大倍数接近 960 时,会写入约 830 万个像素,但只检查 9 次。若 deadline 在放大过程中到期,任务会先完成整段复制,最后才在 346 行发现超时;外层 spawn_blocking + timeout_at 可能已经放弃等待,而 CPU permit 仍被后台任务占用。建议按输出像素或按固定行/块粒度检查 deadline。 注意这是假缺陷。 对比后,该问题不是 `c2cfe4ff0` 首次引入的回归,而是 `aa5c857060` 已存在的 deadline 语义风险。 `aa5c857060` 当时的实现是: ```rust deadline.check("最近邻尺寸恢复")?; let delivered = resize_nearest(&logical, rgba_image.width(), rgba_image.height()); deadline.check("PNG 编码")?; ``` 也就是说,整个 `imageops::resize` 本身不可中断,只在前后检查 deadline。该版本甚至没有放大过程中的任何检查。 当前分支改成了自有整数倍循环: [pixel_art_snapper.rs:446](<C:/projects/narrative/Genarrative/server-rs/crates/platform-image/src/pixel_art_snapper.rs:446>) ```rust deadline.check_iteration(pixel_index, "整数倍放大")?; ``` 它至少会按逻辑像素检查,但当逻辑图很小、整数倍很大时,内层 `scale × scale` 写入仍可能长时间没有检查。因此: - 作为“新增代码的预算检查不够细”仍然成立; - 但作为本分支相对 `aa5c857060` 的新回归,不成立; - 当前实现相较旧版是部分改善,风险应降为继承的性能/超时边界问题,而不是阻断性缺陷。
lhk229 added 2 commits 2026-08-15 19:07:53 +08:00
Merge remote-tracking branch 'origin/master' into feat/pixel_art
Project CI / Repository checks (pull_request) Successful in 1m43s
Project CI / Frontend tests (pull_request) Successful in 3m59s
Project CI / Native shell tests (pull_request) Successful in 15m12s
Project CI / Backend tests (pull_request) Successful in 4m35s
58c74c9e03
lhk229 added 2 commits 2026-08-17 11:38:13 +08:00
Merge remote-tracking branch 'origin/master' into feat/pixel_art
Project CI / Repository checks (pull_request) Successful in 1m1s
Project CI / Frontend tests (pull_request) Successful in 3m21s
Project CI / Backend tests (pull_request) Successful in 3m48s
Project CI / Native shell tests (pull_request) Successful in 14m22s
f5febdb57f
lhk229 added 1 commit 2026-08-17 13:27:23 +08:00
Merge remote-tracking branch 'origin/master' into feat/pixel_art
Project CI / Repository checks (pull_request) Successful in 1m20s
Project CI / Backend tests (pull_request) Successful in 3m57s
Project CI / Frontend tests (pull_request) Successful in 2m55s
Project CI / Native shell tests (pull_request) Successful in 13m57s
a4d5e3e73a
Member

应该分为两种情况处理

  1. 原图依旧是正确像素数,但是预览的时候放大
  2. 原图直接是放大后的大小
应该分为两种情况处理 1. 原图依旧是正确像素数,但是预览的时候放大 2. 原图直接是放大后的大小
kdletters requested review from wuxiangwanzi 2026-08-17 15:05:05 +08:00
kdletters scheduled this pull request to auto merge when all checks succeed 2026-08-17 15:12:51 +08:00
lhk229 added 1 commit 2026-08-17 16:27:55 +08:00
修复完美像素对小于 4 像素软网格识别偏大
Project CI / Frontend tests (pull_request) Successful in 2m55s
Project CI / Backend tests (pull_request) Successful in 3m56s
Project CI / Repository checks (pull_request) Successful in 1m25s
Project CI / Native shell tests (pull_request) Successful in 14m0s
c20a7dea4a
峰间距过滤器 4 会把 2–3 像素网格的相邻峰成对合并成 5–6,再取 P30 就把
683×1024 生成素材统一报成 5–6 像素格;改为 2 后不再合并峰。同时 walker
窗口起点向上取整且不早于上一条切线 +2,避免小步长时切出 1 像素格。

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
lhk229 changed title from 完美像素产物会缩放到与原图相近的尺寸 to 完美像素产物会缩放到与原图相近的尺寸;提高识别小网格的倾向 2026-08-17 16:32:59 +08:00
lhk229 added 1 commit 2026-08-19 12:07:56 +08:00
Merge remote-tracking branch 'origin/master' into feat/pixel_art
Project CI / Repository checks (pull_request) Successful in 2m34s
Project CI / Frontend tests (pull_request) Successful in 2m58s
Project CI / Backend tests (pull_request) Successful in 4m2s
Project CI / Native shell tests (pull_request) Failing after 15m56s
868d2eb2e4
# Conflicts:
#	docs/project-memory/shared-memory/decision-log.md
lhk229 added 1 commit 2026-08-19 16:23:06 +08:00
Merge branch 'master' into feat/pixel_art
Project CI / Repository checks (pull_request) Successful in 2m32s
Project CI / Frontend tests (pull_request) Successful in 2m59s
Project CI / Backend tests (pull_request) Successful in 4m1s
Project CI / Native shell tests (pull_request) Failing after 14m49s
ba9a39bd44
lhk229 added 1 commit 2026-08-20 12:52:37 +08:00
Merge branch 'master' into feat/pixel_art
Project CI / Repository checks (pull_request) Successful in 2m57s
Project CI / Frontend tests (pull_request) Successful in 3m38s
Project CI / Backend tests (pull_request) Successful in 4m12s
Project CI / Native shell tests (pull_request) Successful in 14m43s
f1c18b41a5
lhk229 added 1 commit 2026-08-20 17:06:02 +08:00
Merge branch 'master' into feat/pixel_art
Project CI / Repository checks (pull_request) Successful in 2m39s
Project CI / Frontend tests (pull_request) Successful in 3m2s
Project CI / Backend tests (pull_request) Successful in 4m15s
Project CI / Native shell tests (pull_request) Successful in 15m20s
69cf850bbb
lhk229 added 1 commit 2026-08-21 10:42:24 +08:00
合并最新master
Project CI / Repository checks (pull_request) Successful in 3m26s
Project CI / Frontend tests (pull_request) Successful in 3m41s
Project CI / Backend tests (pull_request) Successful in 4m22s
Project CI / Native shell tests (pull_request) Successful in 15m36s
7ce3b695be
合入 origin/master 的 UI 自动识别和布局编辑器简化版 (#170)

冲突处理:同时保留 UI Editor 与完美像素决策记录;总控面板重试逻辑保持本分支 Prettier 缩进
kdletters merged commit 7e3adc38b9 into master 2026-08-21 11:19:18 +08:00
kdletters deleted branch feat/pixel_art 2026-08-21 11:19:18 +08:00
Sign in to join this conversation.