============================== an exercise with grayscale and a for-loop //--- call for answers, then run it: > Picture p = new Picture( "/Users/wallingf/Desktop/billy-joel-sf.jpg" ); > p.allDimensionsAsRed(); > p.show(); //--- look at makeGrayscale() //--- grayscale is *any* image where ( red == green == blue ) //--- how many grayscale colors are there? // [256 == 0..255] //--- how many grayscale versions of an image are there? // 256 ^ number of pixels! //--- which grayscale is best? // in general, impossible to say? // some heuristics... // in specific, experiment! //--- idea versus implementation ============================== DEMO "IT WORKS" -- THEN STEP THROUGH THE LOOP > p = new Picture( "/Users/wallingf/Desktop/greece.jpg" ); > p.show(); > p.getPixel(0,0) Pixel red=127 green=163 blue=197 > p.getPixel(0,1) Pixel red=127 green=163 blue=197 > p.getPixel(0,2) Pixel red=128 green=164 blue=198 > p.allDimensionsAsRed(); > p.getPixel(0,0) Pixel red=127 green=127 blue=127 > p.getPixel(0,1) Pixel red=127 green=127 blue=127 > p.getPixel(0,2) Pixel red=128 green=128 blue=128 > p.repaint(); ============================== EXERCISE: LIGHTEN IMAGE BY 10% > Picture p = new Picture( "/Users/wallingf/Desktop/billy-joel-sf.jpg" ); > p.show(); > p.lighter(); > p.repaint(); // can't see much > p.lighter(); > p.repaint(); > p.lighter(); > p.repaint(); > p = new Picture( "/Users/wallingf/Desktop/greece.jpg" ); > p.show(); > p.lighter(); > p.repaint(); > p.lighter(); > p.repaint(); > p.lighter(); > p.repaint(); //--- Why not let our pictures be told how much to lighten the image? public void lighter( double amount ) { Pixel[] pixels = this.getPixels(); for ( int i = 0; i < pixels.length; i++ ) { Pixel p = pixels[i]; double factor = 1 + amount; p.setRed ( (int) (p.getRed () * factor) ); p.setGreen( (int) (p.getGreen() * factor) ); p.setBlue ( (int) (p.getBlue () * factor) ); } } > Picture p = new Picture( "/Users/wallingf/Desktop/billy-joel-sf.jpg" ); > p.show(); > p.lighter( 0.1 ); > p.repaint(); > p.lighter( 0.4 ); > p.repaint(); > p = new Picture( "/Users/wallingf/Desktop/greece.jpg" ); > p.show(); > p.lighter( 0.5 ); > p.repaint();