xxxxxxxxxx
97
let cols, rows,
current = [],
previous = [],
currImg = [], prevImg = [],
damping = 0.95,
imgWidth, imgHeight;
function mouseDragged() {
current[floor(mouseX)][floor(mouseY)] = 255;
}
function preload() {
img = loadImage("painting.jpeg");
// img = loadImage("mondrian-painting.jpeg");
}
function setup() {
imgWidth = img.width, imgHeight = img.height;
// console.log(imgHeight, imgWidth);
pixelDensity(1);
createCanvas(imgWidth, imgHeight);
cols = width;
rows = height;
for (let i = 0; i < cols; i++) {
current[i] = []
previous[i] = []
for (let j = 0; j < rows; j++) {
current[i][j] = 0;
previous[i][j] = 0;
}
}
img.loadPixels();
for (let i = 0; i < cols; i++) {
currImg[i] = [];
prevImg[i] = [];
for (let j = 0; j < rows; j++) {
currImg[i][j] = [];
prevImg[i][j] = [];
for (let k = 0; k < 4; k++) {
let loc = (i + j * cols) * 4;
currImg[i][j][k] = img.pixels[loc + k];
prevImg[i][j][k] = img.pixels[loc + k];
}
}
}
}
function draw() {
background(0)
loadPixels()
for (let i = 1; i < cols - 1; i++) {
for (let j = 1; j < rows - 1; j++) {
current[i][j] =
(previous[i - 1][j] + previous[i + 1][j] +
previous[i][j - 1] + previous[i][j + 1] +
previous[i - 1][j - 1] + previous[i - 1][j + 1] +
previous[i + 1][j - 1] + previous[i + 1][j + 1]
) / 4 - current[i][j];
current[i][j] = current[i][j] * damping;
let index = (i + j * cols) * 4;
for (let k = 0; k < 3; k++) {
if (current[i][j] > 0.01) {
currImg[i][j][k] = (prevImg[i - 1][j][k] + prevImg[i + 1][j][k] +
prevImg[i][j - 1][k] + prevImg[i][j + 1][k] +
prevImg[i - 1][j - 1][k] + prevImg[i - 1][j + 1][k] +
prevImg[i + 1][j - 1][k] + prevImg[i + 1][j + 1][k]
) / 4 - currImg[i][j][k];
} else {
currImg[i][j][k] = img.pixels[index + k];
}
}
pixels[index + 0] = currImg[i][j][0];
pixels[index + 1] = currImg[i][j][1];
pixels[index + 2] = currImg[i][j][2];
pixels[index + 3] = 255
}
}
updatePixels()
//swap buffers
let temp = previous
previous = current
current = temp;
let temp2 = prevImg;
prevImg = currImg;
currImg = temp2;
}