我试图循环遍历canvas方法返回的数组:getImageData()返回绘制到HTML画布的图像的像素颜色值。但是我正在杀死我的浏览器,当然,对于平均大小的图像,返回的数组非常大,我使用了错误的方法还是循环通过这么大的数组只是不可能?
for (var i = 0; i < ImageData.length; i + 3) {
if (ImageData[i] > 210 && ImageData[i + 1] < 200 && ImageData[i + 2] > 60) {
var Suspect = {
Red: ImageData[i],
Green: ImageData[i + 2],
Blue: ImageData[i + 3]
}
Suspects.push(Suspect);
}
}
答案 0 :(得分:5)
您永远不会使用语句i
递增i+3
。您需要将结果分配回i
:i = i+3
或i += 3
。
另请注意,对于ImageData.data
,通常的步长为4,而不是3;数组中的每四个值都是像素的alpha channel(不透明度)。
答案 1 :(得分:2)
当然这是在剔除浏览器。 i
为0
,并且始终为0 ......所以你自己陷入了僵局。
i+3
是一个表达式,其计算结果为3,但i
未重新分配/递增,请写i += 3
答案 2 :(得分:0)
浏览器陷入僵局,因为我仍然是&#39; 0&#39;总是。您应该将for循环i+3
更改为i+=3
。
for (var i = 0; i < ImageData.length; i += 3) {
if (ImageData[i] > 210 && ImageData[i + 1] < 200 && ImageData[i + 2] > 60) {
var Suspect = {
Red: ImageData[i],
Green: ImageData[i + 2],
Blue: ImageData[i + 3]
}
Suspects.push(Suspect);
}
}