44 lines
1.1 KiB
JavaScript
44 lines
1.1 KiB
JavaScript
// TODO Optimize edge cases.
|
|
// TODO Optimize index calculation.
|
|
// TODO Optimize arguments.
|
|
export function blurX(source, target, r) {
|
|
var n = source.width,
|
|
m = source.height,
|
|
w = (r << 1) + 1;
|
|
for (var j = 0; j < m; ++j) {
|
|
for (var i = 0, sr = 0; i < n + r; ++i) {
|
|
if (i < n) {
|
|
sr += source.data[i + j * n];
|
|
}
|
|
if (i >= r) {
|
|
if (i >= w) {
|
|
sr -= source.data[i - w + j * n];
|
|
}
|
|
target.data[i - r + j * n] = sr / Math.min(i + 1, n - 1 + w - i, w);
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
// TODO Optimize edge cases.
|
|
// TODO Optimize index calculation.
|
|
// TODO Optimize arguments.
|
|
export function blurY(source, target, r) {
|
|
var n = source.width,
|
|
m = source.height,
|
|
w = (r << 1) + 1;
|
|
for (var i = 0; i < n; ++i) {
|
|
for (var j = 0, sr = 0; j < m + r; ++j) {
|
|
if (j < m) {
|
|
sr += source.data[i + j * n];
|
|
}
|
|
if (j >= r) {
|
|
if (j >= w) {
|
|
sr -= source.data[i + (j - w) * n];
|
|
}
|
|
target.data[i + (j - r) * n] = sr / Math.min(j + 1, m - 1 + w - j, w);
|
|
}
|
|
}
|
|
}
|
|
}
|