我有这个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的图像,一切正常。但是如果图像变大,它就会停止工作,控制台中没有错误消息!
答案 0 :(得分:0)
uc + vc = 1;
是一个无效的陈述,uc
和vc
似乎没有在任何地方定义, 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);