
function moir(imgData) {
var width = imgData.width,
height = imgData.height,
pixelData = imgData.data,
Center_X = (width + 1) / 2,
Center_Y = (height + 1) / 2,
Degree = Degree || 20,
beta;
for (var i = 1; i < height; i++) {
for (j = 1; j < width; j++) {
x0 = j - Center_X;
y0 = Center_Y - i;
if (x0 != 0) {
beta = Math.atan(y0 / x0);
}
if (x0 < 0) {
beta = beta + Math.PI;
} else {
beta = Math.PI / 2;
}
var radius = Math.sqrt(x0 * x0 + y0 * y0);
beta = beta + radius * Degree;
x = radius * Math.sin(beta);
y = radius * Math.cos(beta);
if (x > 1 && x < width && y < height && y > 1) {
x1 = Math.floor(x);
y1 = Math.floor(y);
p = x - x1;
q = y - y1;
var r0 = for_img(x1, y1, p, q, 0);
var g0 = for_img(x1, y1, p, q, 1);
var b0 = for_img(x1, y1, p, q, 2);
var p = i * canvas.width + j;
pixelData[p * 4 + 0] = r0;
pixelData[p * 4 + 1] = g0;
pixelData[p * 4 + 2] = b0;
}
}
}
function for_img(x, y, p, q, n) {
return pixelData[(x * width + y) * 4 + n] * (1 - p) * (1 - q) + pixelData[(x * width + y + 1) * 4 + n] * p * (1 - q) + pixelData[((x + 1) * width + y) * 4 + n] * q * (1 - p) + pixelData[((x + 1) * width + y + 1) * 4 + n] * p * q
}
imgData.data = pixelData;
return imgData;
}