是否可以通过Web组件有效地修改html5 Canvas ?

更新:

var imageData = context.getImageData(x, y, w, h)
var buffer = imageData.data.buffer;  // ArrayBuffer

如果缓冲区是可写的,则可能是这样。

最佳答案

不,不在WebAssembly和Web-api开发的现阶段。
使用context.getImageData,您将获得一个带有新缓冲区的新ImageData对象,该对象必须再次复制到WebAssembly实例的内存缓冲区中。
但是,如果您不需要从 Canvas 上读取内容而只需要编写,则可以在WebAssembly实例的内存中分配ImageData.data。使用ImageData构造函数

imageData = new ImageData(new Uint8ClampedArray(waInstance.export.memory.buffer, byteOffset, width*height*4), width, height)
imageData具有指向您的数据的指针。在每个渲染中,在WebAssembly中进行工作,并在imageData中使用相同的context.putImageData(imageData),每个周期仅进行一次大数据复制。

关于html - 从wasm修改 Canvas ,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/42806037/

10-11 18:21