1 /* 2 * A program to paint an abstract gradient in the vertical direction. 3 */ 4 5 package npw; 6 7 import painter.SPainter; 8 import shapes.SCircle; 9 import shapes.SSquare; 10 11 import javax.swing.*; 12 import java.awt.*; 13 import java.awt.geom.Point2D; 14 import java.io.File; 15 import java.io.IOException; 16 import java.util.Random; 17 import java.util.Scanner; 18 import javax.imageio.ImageIO; 19 import javax.swing.filechooser.FileNameExtensionFilter; 20 import java.awt.image.BufferedImage; 21 22 import static javax.swing.SwingUtilities.*; 23 24 public class Invention1 { 25 //----- Fields / Global Vars and Objects ----- 26 private BufferedImage image = getImageFromPath(); 27 private double pixelSize = 1; 28 private int height = image.getHeight(); 29 private int width = image.getWidth(); 30 private SPainter painter = new SPainter( "Invention 1", width, height ); 31 //Changing this stretches picture 32 private SCircle circlePixel = new SCircle( pixelSize ); 33 private SSquare squarePixel = new SSquare( pixelSize ); 34 35 //----- Constructors ----- 36 private Invention1() throws IOException { 37 paintTheRows(); 38 } 39 //----- Methods / Functions ----- 40 public static void main(String[] args) { 41 invokeLater( () -> { 42 try { 43 new Invention1(); 44 } catch (IOException e) { 45 e.printStackTrace(); 46 } 47 } ); 48 } 49 50 //Make Program Compatible With Windows (I use windows :P ) 51 private BufferedImage getImageFromPath() throws IOException { 52 JFileChooser chooser = new JFileChooser(); 53 FileNameExtensionFilter filter = new FileNameExtensionFilter( "JPG,JPEG,PNG,", "jpg", "png", "jpeg" ); 54 chooser.setFileFilter( filter ); 55 int returnVal = chooser.showOpenDialog( chooser ); 56 String path = null; 57 if (returnVal == JFileChooser.APPROVE_OPTION) { 58 path = chooser.getSelectedFile().getPath(); 59 } 60 File file = new File( path ); 61 return ImageIO.read( file ); 62 } 63 64 private Color getPixelColor(int x, int y) { 65 int rgb = image.getRGB( x, y ); 66 int red = (rgb & 0x00ff0000) >> 16; 67 int green = (rgb & 0x0000ff00) >> 8; 68 int blue = (rgb & 0x000000ff); 69 Color PixelColor = new Color( red, green, blue ); 70 return PixelColor; 71 } 72 private void paintOnePixel(int workingPixel, int workingRow) throws IOException { 73 Color pixelColor = getPixelColor( workingPixel, workingRow); 74 painter.setColor( pixelColor ); 75 //Changing this may make pictures generate faster 76 painter.mrt( 1 ); 77 78 // Randomly use a square or circle as a pixel 79 Random rgen = new Random(); 80 int randomNum = rgen.nextInt( 1 ); 81 if (randomNum == 1) { 82 painter.paint( squarePixel ); 83 } else { 84 painter.paint( circlePixel ); 85 } 86 } 87 private void paintOneRow(int workingRow) throws IOException { 88 int pixelIterator = 0; 89 while (pixelIterator < image.getWidth()) { 90 paintOnePixel( pixelIterator, workingRow); 91 pixelIterator = pixelIterator +1; 92 } 93 } 94 private void paintTheRows() throws IOException { 95 int rowCount = 0; 96 // Starts Off From Corner of Canvas 97 painter.moveTo( new Point2D.Double( 0, 0 ) ); 98 for (int rowIterator = 0; rowIterator < image.getHeight(); rowIterator++) { 99 paintOneRow( rowIterator); 100 rowCount = rowCount + 1; 101 // Makes a new Row 102 painter.moveTo( new Point2D.Double( 0, rowIterator )); 103 if (rowCount == image.getHeight()) { 104 break; 105 } 106 } 107 } 108 } 109