Image processing #
image_processing.js
let img;
let isGrayscale = false;
function preload() {
img = loadImage('car.jpg');
}
function setup() {
createCanvas(img.width, img.height);
img.resize(width, height);
sliderRad = createSlider(10, 100, 50, 5);
sliderRad.position(40, 20);
sliderRad.style('width', '80px');
sliderZoom = createSlider(1, 4, 2, 0.1);
sliderZoom.position(40, 50);
sliderZoom.style('width', '80px');
grayscaleButton = createButton('Luma');
grayscaleButton.position(40, 80);
grayscaleButton.mouseClicked(toggleGrayscale);
}
function draw() {
background(0);
image(img, 0, 0);
// Apply the zoom effect within the circular area
loadPixels();
let lensRadius = sliderRad.value();
let zoomFactor = sliderZoom.value();
for (let x = 0; x < width; x++) {
for (let y = 0; y < height; y++) {
let dx = x - mouseX;
let dy = y - mouseY;
let distance = sqrt(dx * dx + dy * dy);
if (distance < lensRadius) {
let r = distance / lensRadius;
let xZoomed = mouseX + (dx * (1 + zoomFactor * (1 - r)));
let yZoomed = mouseY + (dy * (1 + zoomFactor * (1 - r)));
let indexZoomed = (int(yZoomed) * width + int(xZoomed)) * 4;
let index = (y * width + x) * 4;
if (isGrayscale) {
let gray = (pixels[index] + pixels[index + 1] + pixels[index + 2]) / 3;
pixels[index] = gray;
pixels[index + 1] = gray;
pixels[index + 2] = gray;
} else {
pixels[index] = pixels[indexZoomed];
pixels[index + 1] = pixels[indexZoomed + 1];
pixels[index + 2] = pixels[indexZoomed + 2];
}
}
}
}
updatePixels();
}
function toggleGrayscale() {
isGrayscale = !isGrayscale;
}