import java.awt.Canvas; import java.awt.Graphics; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.awt.image.BufferedImage; import java.io.File; import java.io.IOException; import java.util.ArrayList; import java.util.Arrays; import java.util.List; import java.util.logging.Level; import java.util.logging.Logger; import javax.imageio.ImageIO; import javax.swing.JButton; import javax.swing.JFrame; import javax.swing.JLabel; import javax.swing.JTextField; public class Main extends JFrame { JLabel label; JLabel lLiczbaPikseliNapis, lLiczbaPikseli, lLiczbaPikseliParralelStreamNapis, lLiczbaPikseliParralelStream; JLabel lCzasNapis, lCzasParralelStreamNapis, lCzas, lCzasParralelStream; JTextField textField; PasekSzarości pasekSzarości; JButton bzaladuj; Canvas canvas; BufferedImage obraz; List lista; Graphics kredka; public Main() { setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); setLayout(null); //setBounds(100,100,500,500); setExtendedState(JFrame.MAXIMIZED_BOTH); setVisible(true); setTitle("projekt 2 - ParralelStream"); label = new JLabel(); label.setBounds(0, 0, 200, 25); label.setVisible(true); label.setText("wpisz adres pliku"); add(label); textField = new JTextField(); textField.setBounds(0, 25, getWidth(), 25); textField.setVisible(true); textField.setText("C:\\Users\\Media\\Desktop\\zdjecie.jpg"); add(textField); textField.repaint(); bzaladuj = new JButton(); bzaladuj.setVisible(true); bzaladuj.setText("zaladuj"); bzaladuj.setBounds(0, 50, 100, 25); bzaladuj.addActionListener(bzaladujListener); add(bzaladuj); bzaladuj.repaint(); pasekSzarości = new PasekSzarości(0, 75, getWidth(), 25, this); lLiczbaPikseliNapis = new JLabel(); lLiczbaPikseliNapis.setBounds(0, 100, 100, 25); lLiczbaPikseliNapis.setVisible(true); lLiczbaPikseliNapis.setText("liczba pikseli: "); add(lLiczbaPikseliNapis); lLiczbaPikseliNapis.repaint(); lLiczbaPikseli = new JLabel(); lLiczbaPikseli.setBounds(100, 100, 100, 25); lLiczbaPikseli.setVisible(true); lLiczbaPikseli.setText("0"); add(lLiczbaPikseli); lLiczbaPikseli.repaint(); lLiczbaPikseliParralelStreamNapis = new JLabel(); lLiczbaPikseliParralelStreamNapis.setBounds(200, 100, 250, 25); lLiczbaPikseliParralelStreamNapis.setVisible(true); lLiczbaPikseliParralelStreamNapis.setText("liczba pikseli ParralelStream: "); add(lLiczbaPikseliParralelStreamNapis); lLiczbaPikseliParralelStreamNapis.repaint(); lLiczbaPikseliParralelStream = new JLabel(); lLiczbaPikseliParralelStream.setBounds(400, 100, 200, 25); lLiczbaPikseliParralelStream.setVisible(true); lLiczbaPikseliParralelStream.setText("0"); add(lLiczbaPikseliParralelStream); lLiczbaPikseliParralelStream.repaint(); canvas = new Canvas(); canvas.setBounds(0, 150, this.getWidth(), this.getHeight() - 150); canvas.setVisible(true); add(canvas); canvas.repaint(); lCzasNapis = new JLabel(); lCzasNapis.setBounds(0, 125, 100, 25); lCzasNapis.setVisible(true); lCzasNapis.setText("czas: "); add(lCzasNapis); lCzasNapis.repaint(); lCzas = new JLabel(); lCzas.setBounds(100, 125, 100, 25); lCzas.setVisible(true); lCzas.setText("0"); add(lCzas); lCzas.repaint(); lCzasParralelStreamNapis = new JLabel(); lCzasParralelStreamNapis.setBounds(200, 125, 200, 25); lCzasParralelStreamNapis.setVisible(true); lCzasParralelStreamNapis.setText("czas ParralelStream: "); add(lCzasParralelStreamNapis); lCzasParralelStreamNapis.repaint(); lCzasParralelStream = new JLabel(); lCzasParralelStream.setBounds(400, 125, 100, 25); lCzasParralelStream.setVisible(true); lCzasParralelStream.setText("0"); add(lCzasParralelStream); lCzasParralelStream.repaint(); } public static void main(String[] args) { Main okno = new Main(); } ActionListener bzaladujListener = new ActionListener() { @Override public void actionPerformed(ActionEvent e) { try { zaladujObraz(); } catch (IOException ioex) { textField.setText("Proszę podaj poprawną ścieżkę :)"); return; } wyszarzObraz(); zaladujObrazZTablicy(); } }; public void zaladujObraz() throws IOException { obraz = ImageIO.read(new File(textField.getText())); kredka = canvas.getGraphics(); kredka.drawImage(obraz, 0, 0, canvas.getWidth(), canvas.getHeight(), null); lista = new ArrayList<>(); for (int y = 0; y < obraz.getHeight(); y++) { for (int x = 0; x < obraz.getWidth() ; x++) { lista.add(obraz.getRGB(x, y)); } } } public void wyszarzObraz() { for (int i = 0; i < lista.size(); i++) { lista.set(i, lista.get(i)+0x1000000); int R = lista.get(i) / 0x010000; int G = (lista.get(i) % 0x010000) / 0x000100; int B = lista.get(i) % 0x000100; int s = (int) (R * 0.33 + G * 0.33 + B * 0.33); lista.set(i,s * 0x010000 + s * 0x000100 + s); } } public void zaladujObrazZTablicy() { for (int i = 0; i < lista.size(); i++) { obraz.setRGB(i % obraz.getWidth(), i / obraz.getWidth(), lista.get(i)); } try { Thread.sleep(100); } catch (InterruptedException ex) { Logger.getLogger(Main.class.getName()).log(Level.SEVERE, null, ex); } kredka.drawImage(obraz, 0, 0, canvas.getWidth(), canvas.getHeight(), null); } public void zliczajPiksele() { int liczbaPikseli = 0; liczbaPikseli = (int) lista.stream().filter(e -> e >= pasekSzarości.getKolor()).count(); this.lLiczbaPikseli.setText(liczbaPikseli + ""); } void zliczajPikseleParralel() { int liczbaPikseli = (int) lista.parallelStream().filter(e -> e >= pasekSzarości.getKolor()).count(); this.lLiczbaPikseliParralelStream.setText(liczbaPikseli + ""); } }