Invention1.java
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