For-Loop没有错误消息就完成了

时间:2012-11-28 08:30:17

标签: javascript image-processing

我有这个for - 循环:

y1 = 0; y2 = 3264; x1 = 0; x2 = 4928; uc = 1; vc = 1; scale = 1;

for (var y = y1; y < y2; y++) {
    for (var x = x1; x < x2; x++) {
        sumR = 0;
        sumG = 0;
        sumB = 0;
        i = 0;

        for (var v = -vc; v <= vc; v++) {
            for (var u = -uc; u <= uc; u++) {
                if (kernel[i] != 0) {
                    var tempX = x + u < 0 ? 0 : x + u;
                    var tempY = y + v < 0 ? 0 : y + v;
                    tempX = tempX >= width ? width - 1 : tempX;
                    tempY = tempY >= height ? height - 1 : tempY;

                    sumR += pixels.data[((tempY * (pixels.width*4)) + (tempX * 4)) + 0] * kernel[i];
                    sumG += pixels.data[((tempY * (pixels.width*4)) + (tempX * 4)) + 1] * kernel[i];
                    sumB += pixels.data[((tempY * (pixels.width*4)) + (tempX * 4)) + 2] * kernel[i];
                }
                i++;
            }
        }
        tempArray.push(sumR * scale, sumG * scale, sumB * scale, 255);
    }
    console.log(y + "|" + y2);
}

所以基本上它是关于图像处理,循环在y = 3115处停止而没有任何错误,循环之后的所有内容都不计算它只是在那里“崩溃”。你们有什么想法会发生这种情况吗?内存会出现问题吗?

更新:我认为我做了这个abit不清楚:如果我将这个算法用于大小为y2 = 1000和x2 = 1000的图像,一切正常。但是如果图像变大,它就会停止工作,控制台中没有错误消息!

2 个答案:

答案 0 :(得分:0)

  • uc + vc = 1;是一个无效的陈述,
  • ucvc似乎没有在任何地方定义,
  • scale未在任何地方定义。

  • 这里的第二个x1应该是x2

    x1 = 0; x1 = 4928;
    //Should probably be:
    x1 = 0; x2 = 4928;
    

这几乎归结为:“调试代码”。

答案 1 :(得分:0)

好吧我终于找到了问题,

我以这种方式初始化数组:在for循环之上var tempArray = [];,下一步是我尝试以这种方式初始化它:var tempArray = new Array(width * height * 4)

浏览器现在停在那个位置,甚至没有进入for循环。所以我猜数组只是为了创造。

解决方案:我现在正在使用Typed Array,一切正常:

var tempArray = new Uint8ClampedArray(width * height * 4);