For循环是杀死浏览器

时间:2014-08-08 12:43:44

标签: javascript arrays for-loop canvas

我试图循环遍历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);
    }
}

3 个答案:

答案 0 :(得分:5)

您永远不会使用语句i递增i+3。您需要将结果分配回ii = i+3i += 3

另请注意,对于ImageData.data,通常的步长为4,而不是3;数组中的每四个值都是像素的alpha channel(不透明度)。

答案 1 :(得分:2)

当然这是在剔除浏览器。 i0,并且始终为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);
    }
}