扩展库 / stb_image_resize2
stb_image_resize2
用 Buffer 缩放 uint8 图片,支持 sRGB 与 linear 模式。
输入、输出各限 64 MiB;2 通道按灰度+alpha、4 通道按 RGBA 缩放。XLang 入口在传给 C 前拒绝尺寸及步长整数回绕。2026-10-26 重建发布物后,Windows/Linux x64 默认包门禁均通过严格 C、Linux ASan/UBSan、像素/步长/分配故障边界,以及核心和 C/XLang 范例独立 EXE AOT;黑白中点固定核对 sRGB 188 与 linear 128。旧共享 AOT 缺符号不再复现。本包仅签收有界 Buffer 缩放接口,不替代依赖包 stb_image 的私有构造器访问控制修复。
API
| 函数 | 用途 |
|---|---|
resize | sRGB 颜色空间缩放;可指定输入行字节步长 |
resizeLinear | 线性空间缩放;参数与 resize 相同 |
available / version | 检查模块与查询所用 stb 版本 |
xlang
import stb_image
import stb_image_resize2
stb_image.StbImage image = stb_image.load("photo.png", 4)
Buffer small = stb_image_resize2.resize(image.pixels(),
image.width(), image.height(), 4, 320, 240)
C
包含 include/stb_image_resize2_native.h。xstbir_resize 返回的 xbuffer* 由调用方以 xrtBufferDestroy 释放;输入像素仅借用。
Windows 可从仓库根目录运行 powershell -NoProfile -ExecutionPolicy Bypass -File release/extlibs/stb_image_resize2/test/check.ps1,联合验证 C 边界、XLang 用例与双语范例的固定输出。灰度+alpha 的透明白/不透明黑缩放另核对固定像素值;C/XLang 范例在独立 EXE 模式下均可显式传入图片路径。Linux ASan/UBSan 门禁见包内 README。
行步长输入仅要求 (height - 1) * stride + width * channels 字节,末行不必有 padding;输入像素与 padding 不被修改,输出 Buffer 独立拥有。包内 examples/padded_rows.xl / padded_rows_c.c 使用同一五字节灰度输入,分别验证 sRGB 188、linear 128、短一字节拒绝和恢复,并对照同一六行输出,无需外部素材。原有图片解码范例不被替换。
2026-10-30:修复逐块分配失败遗漏暂存区/局部采样器、丢失分配上下文的问题,ASan自动启用的路径也在范围内;正常单块路径不增加清零或分配。新C回归360布局、16常量、24/154故障点与21原生上下文故障点通过,语言40布局及双语六行golden通过;两平台同一最终回归旧40个内存不平衡预算→0,旧5个上下文失败预算/202次错误上下文→0。Windows默认39项、Linux原生ASan/UBSan及完整门禁(各8份独立程序)通过,三个实际生成原型与错改返回负例均验证。主线/XRT未改,依赖stb_image的私有构造器M3风险仍保留,本包继续R,不扩大为所有滤镜/格式或依赖发布签收。