这很简单。
画布的所有像素数据都按顺序存储在一个数组中。
第一个像素的数据占用数组元素#0-3 (red=0/green=1/blue=2/alpha=3)。
第二个像素的数据占用数组元素#4-7 (red=4/green=5/blue=6/alpha=7)。
等等...
您可以使用 context.getImageData() 并枚举数组来加载该像素数据:
const imgData = context.getImageData(0, 0, canvas.width, canvas.height);
const data = imgData.data;
// enumerate all pixels
// each pixel's r,g,b,a datum are stored in separate sequential array elements
for(let i = 0; i < data.length; i += 4) {
const red = data[i];
const green = data[i + 1];
const blue = data[i + 2];
const alpha = data[i + 3];
}
您还可以更改这些数组值,然后使用 .将数组保存回图像context.putImageData()
。
// save any altered pixel data back to the context
// the image will reflect any changes you made
context.putImageData(imgData, 0, 0);
然后,图像将根据您对其像素阵列所做的更改而更改。
每个像素包含 4 个分量红色、绿色、蓝色、alpha - 每个分量都是数字 0-255。循环从左上角开始到右下角。