Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- import java.awt.image.BufferedImage;
- import java.io.BufferedWriter;
- import java.io.File;
- import java.io.FileWriter;
- import java.io.IOException;
- import javax.imageio.ImageIO;
- import javax.swing.JButton;
- import javax.swing.JCheckBox;
- import javax.swing.JFileChooser;
- import javax.swing.JFrame;
- import javax.swing.JOptionPane;
- import javax.swing.UIManager;
- import javax.swing.UnsupportedLookAndFeelException;
- public class ImageBrightnessDetector {
- private JFrame frame = new JFrame("ImageBrightnessDetector");
- private JFileChooser fileChooser = new JFileChooser();
- private JCheckBox checkBox;
- private File[] files;
- public static void main(String[] args) {
- ImageBrightnessDetector ibd = new ImageBrightnessDetector();
- ibd.frame.setVisible(true);
- }
- public ImageBrightnessDetector() {
- try {
- UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());
- } catch (ClassNotFoundException | InstantiationException | IllegalAccessException
- | UnsupportedLookAndFeelException e) {
- e.printStackTrace();
- }
- initialize();
- }
- private void initialize() {
- frame.setBounds(400, 300, 400, 400);
- frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
- frame.getContentPane().setLayout(null);
- checkBox = new JCheckBox("Add File names to output");
- checkBox.setBounds(50, 100, 200, 20);
- checkBox.setVisible(true);
- frame.getContentPane().add(checkBox);
- JButton buttonInput = new JButton("Select Input");
- buttonInput.setBounds(50, 200, 100, 30);
- buttonInput.addActionListener(e -> files = getInputFiles());
- buttonInput.setVisible(true);
- frame.getContentPane().add(buttonInput);
- JButton buttonOutput = new JButton("Save Result");
- buttonOutput.setBounds(250, 200, 100, 30);
- buttonOutput.addActionListener(e -> {
- File outputFile = getOutputFile();
- if (outputFile == null) return;
- int[] avgLuminance = new int[files.length];
- try {
- for (int i = 0; i < files.length; i++)
- avgLuminance[i] = calcAverageBrightness(ImageIO.read(files[i]));
- writeOutput(outputFile, avgLuminance);
- } catch (IOException exc) {
- exc.printStackTrace();
- JOptionPane.showConfirmDialog(frame, "An error occured: " + exc.getMessage(), "Error", JOptionPane.OK_OPTION, JOptionPane.ERROR_MESSAGE);
- return;
- }
- });
- buttonOutput.setVisible(true);
- frame.getContentPane().add(buttonOutput);
- }
- private void writeOutput(File outputFile, int[] values) throws IOException {
- BufferedWriter writer = new BufferedWriter(new FileWriter(outputFile));
- for (int i = 0; i < values.length; i++) {
- if (checkBox.isSelected())
- writer.write(files[i].getName() + ";" + values[i]);
- else
- writer.write(values[i] + "");
- writer.newLine();
- }
- writer.close();
- }
- private int calcAverageBrightness(BufferedImage img) {
- long totalLuminance = 0;
- for (int color : img.getRGB(0, 0, img.getWidth(), img.getHeight(), null, 0, img.getWidth())) {
- int red = (color >>> 16) & 0xFF;
- int green = (color >>> 8) & 0xFF;
- int blue = (color >>> 0) & 0xFF;
- totalLuminance += (red * 0.2126f + green * 0.7152f + blue * 0.0722f) / 255 * 100;
- }
- return (int) (totalLuminance / (img.getWidth() * img.getHeight()));
- }
- private File getOutputFile() {
- fileChooser.setMultiSelectionEnabled(false);
- if (fileChooser.showSaveDialog(frame) == JFileChooser.APPROVE_OPTION)
- return fileChooser.getSelectedFile();
- else return null;
- }
- private File[] getInputFiles() {
- fileChooser.setMultiSelectionEnabled(true);
- if (fileChooser.showOpenDialog(frame) == JFileChooser.APPROVE_OPTION)
- return fileChooser.getSelectedFiles();
- else return new File[0];
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement