В 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
, копируя все содержимое во второй раз.
Isесть ли способ переназначить ImageData холста на наши новые ImageData, чтобы мы могли обновить холст только одной копией, используя ctx.putImageData()
?
Если нет, кажется, что использование wasm для манипулированияизображение будет потрачено впустую из-за неэффективного двойного копирования и двойного представления в памяти, особенно при работе с большими изображениями и / или постоянном обновлении холста.