PImage[] imgs = new PImage[4]; // loaded images PImage img; // current image int curImg = 0; // current image int numTiles=15; // number of tiles in magnifying rectangle int tileSize=8; // size of a tile in pixels int offset=75; // offset between the magnifier and the mouse void setup() { size(300,450); smooth(); rectMode(CENTER); for(int i = 0; i < imgs.length; i ++) imgs[i] = loadImage("img-"+(i+1)+".jpg"); img = imgs[curImg]; } void draw() { background(img); // move the lens on the side float offsetX, offsetY; if(mouseX < width/2) offsetX = offset; else offsetX = -offset; if(mouseY < height/2) offsetY = offset; else offsetY = -offset; // draw the magnified rectangle and the "lens" rectangle stroke(0); noFill(); strokeWeight(2); rect(mouseX,mouseY,numTiles,numTiles); rect(mouseX+offsetX,mouseY+offsetY,tileSize*numTiles,tileSize*numTiles); // magnify rectangle from mouse-magD to mouse+magD noStroke(); for (int y=-numTiles/2; y<=numTiles/2; y++) { for (int x=-numTiles/2; x<=numTiles/2; x++) { // to be careful, we should make sure to not go out of image bounds fill(img.get(mouseX+x,mouseY+y)); // note the offset to the left or right rect(mouseX+offsetX+tileSize*x,mouseY+offsetY+tileSize*y,tileSize,tileSize); } } } void keyPressed() { if(key == ' ') { curImg = (curImg+1)%imgs.length; img = imgs[curImg]; } } // START NO NOTES // code used to capture screenshots void keyReleased() { if(key == '`' && !online) save("sketch.png"); }