В JavaScript вы можете управлять пикселями изображения напрямую, используя Uint8ClampedArray
. Перед рендерингом, что изображение на холсте, вы должны:Можно ли нарисовать Uint8ClampedArray непосредственно на холсте?
Создать
ImageData
объект.Продается
Uint8ClampedArray
объектуImageData
сImageData.data.set
.Ничья, что
ImageData
объект с холстомcontext.putImageData
.
Таким образом, от наличия Uint8ClampedArray
с вашим изображением, на самом деле видеть его на экране, это занимает не менее 3 O (N), копирующие операции. Для больших изображений это может быть очень вредным. Одним из решений было бы кэшировать объект ImageData и заменить указатель imageData.data
на ваш Uint8ClampedArray
- но imageData.data
- только для чтения! Есть ли способ сделать это более эффективно?
Примечание: хотя мой ответ кажется правильным (и, возможно, единственным), чтобы делать то, что вы просите, он может не работать на IE10 или ниже (но у меня нет копии для проверки). См. Комментарий к моему ответу. – apsillers