Skip to content

Chart frame capture

图表截图的后端取帧

This page is only available in Chinese. It is shown in its original language.

截图必须保持原图的物理像素,不能让已对齐的 K 线经过 DOM/SVG 缩放,也不能为了导出切换用户当前的渲染后端。

ChartController.captureFrame 请求一次完整绘制,在同一个 RAF 回调的绘制事务结束后执行宿主捕获函数。捕获函数同步固定 Canvas2D 图层、布局位置和引擎 DPR。GPU 表面同时发起后端快照:WebGL 复制已 resolve 到保留缓冲的画布,WebGPU 在浏览器呈现前提交当前纹理到读取缓冲的复制。异步读回不阻塞后续渲染。

WebGPU canvas 配置增加 COPY_SRC。读取缓冲按 256 字节对齐每行,解码时移除行填充,处理 BGRA/RGBA 通道顺序,并把预乘透明度转换为 ImageData 所需的非预乘颜色。读取缓冲在成功或失败后释放;不保存持久截图纹理。

宿主共用一条合成链路:以整数物理坐标一比一叠放各 Canvas,再叠加不含 Canvas 的 DOM 图层。圆角、留白、字体、水印和 PNG 编码只作用于最终图片,下载和剪贴板共用该结果。

截图请求遇到绘制失败、图表销毁或 GPU 读取失败时拒绝 Promise。自定义可见 GPU 后端必须提供 surface.captureFrame 能力,否则明确报错,不自动切换到另一个后端。

本次按用户要求未运行验证。仍需实际确认 WebGPU 的取帧、透明线条、各后端图层顺序及销毁期间的截图请求。