【发布时间】:2012-01-02 14:30:56
【问题描述】:
我有以下简单的模糊算法:
for (y = 0; y < height; ++y) {
for (x = 0; x < width; ++x) {
total = 0
for (ky = -radius; ky <= radius; ++ky)
for (kx = -radius; kx <= radius; ++kx)
total += source(x + kx, y + ky)
dest(x, y) = total / (radius * 2 + 1) ^ 2
}
}
我需要使用一个数组来完成这项工作,该数组由 canvas 使用 getImageData() 生成。问题是画布中的数组是一维的,算法需要一个二维的,因为“kx”和“ky”是与当前像素的距离,在二维数组中,您只需更改其中的一个索引为了在网格上向左或向右移动,但在一维数组中(试图表示二维。一)你不能这样做。
你怎么看,我应该如何解决这个问题?在我看来,整个问题都在这里:
total += source(x + kx, y + ky)
这条线需要从一维数组中获取正确的像素,它应该可以正常工作。
附:我忘了说我试图一次模糊一个通道的图像,就像这样:
for (var i=0; i<imgData.data.length; i+=4) {
red[index] = imgData.data[i];
green[index] = imgData.data[i+1];
blue[index] = imgData.data[i+2];
index++;
}
我将每个数组(红色、绿色和蓝色)分别传递给算法。
【问题讨论】:
标签: javascript algorithm canvas blur