// Template for processing scripts // Tomasz Sulej, generateme.blog@gmail.com, http://generateme.tumblr.com // Licence: http://unlicense.org/ // Usage: // * press SPACE to save // set up filename String filename = "test"; String fileext = ".jpg"; String foldername = "./"; int max_display_size = 1000; // viewing window size (regardless image size) boolean do_blend = false; // blend image after process int blend_mode = OVERLAY; // blend type // working buffer PGraphics buffer; // image PImage img; String sessionid; void setup() { sessionid = hex((int)random(0xffff),4); img = loadImage(foldername+filename+fileext); buffer = createGraphics(img.width, img.height); buffer.beginDraw(); buffer.noStroke(); buffer.smooth(8); buffer.background(0); buffer.image(img,0,0); buffer.endDraw(); // calculate window size float ratio = (float)img.width/(float)img.height; int neww, newh; if(ratio < 1.0) { neww = (int)(max_display_size * ratio); newh = max_display_size; } else { neww = max_display_size; newh = (int)(max_display_size / ratio); } size(neww,newh); processImage(); } void draw() { // fill for iterative processing } void processImage() { buffer.beginDraw(); // START CODE HERE! use buffer to draw/manipulate for(int x=0;x rgb color c = img.get(x,y); buffer.fill( hue(c), saturation(c), brightness(c) ); buffer.rect(x,y,1,1); } } // END CODE HERE! if(do_blend) buffer.blend(img,0,0,img.width,img.height,0,0,buffer.width,buffer.height,blend_mode); buffer.endDraw(); image(buffer,0,0,width,height); } void keyPressed() { // SPACE to save if(keyCode == 32) { String fn = foldername + filename + "/res_" + sessionid + hex((int)random(0xffff),4)+"_"+filename+fileext; buffer.save(fn); println("Image "+ fn + " saved"); } } // final static int[] blends = {ADD, SUBTRACT, DARKEST, LIGHTEST, DIFFERENCE, EXCLUSION, MULTIPLY, SCREEN, OVERLAY, HARD_LIGHT, SOFT_LIGHT, DODGE, BURN}; // ALL Channels, Nxxx stand for negative (255-value) // channels to work with final static int RED = 0; final static int GREEN = 1; final static int BLUE = 2; final static int HUE = 3; final static int SATURATION = 4; final static int BRIGHTNESS = 5; final static int NRED = 6; final static int NGREEN = 7; final static int NBLUE = 8; final static int NHUE = 9; final static int NSATURATION = 10; final static int NBRIGHTNESS = 11; float getChannel(color c, int channel) { int ch = channel>5?channel-6:channel; float cc; switch(ch) { case RED: cc = red(c); break; case GREEN: cc = green(c); break; case BLUE: cc = blue(c); break; case HUE: cc = hue(c); break; case SATURATION: cc = saturation(c); break; default: cc= brightness(c); break; } return channel>5?255-cc:cc; }