是否可以通过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/