在 JavaScript 中,我可以直接操作画布的像素并使用单个副本刷新它们:
ctx = canvas.getContext('2d')
imageData = ctx.getImageData(0, 0, canvas.width, canvas.height)
pixelTypedArray = imageData.data
modifyPixels(pixelTypedArray)
// refresh canvas with single copy
ctx.putImageData(imageData, 0, 0)
但是在 wasm 中,我们必须TypedArray
使用 wasm 内存分配我们自己的内存,然后我们可以使用imageData.data.set(myTypedArray)
但是这似乎只是将新类型数组的全部内容复制到画布的类型数组中,它仍然必须跟随putImageData
,复制整个内容 a第二次。
有什么方法可以将画布的 ImageData 重新分配给我们的新 ImageData,以便我们可以只使用一个副本更新画布ctx.putImageData()
?
如果不是这样,使用 wasm 操作图像的大部分好处似乎都会被低效的双重复制和双重内存表示所浪费,尤其是在处理大图像和/或不断更新画布时。