Advertisement
Guest User

Untitled

a guest
Feb 21st, 2017
77
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 4.06 KB | None | 0 0
  1. import java.awt.image.BufferedImage;
  2. import java.io.BufferedWriter;
  3. import java.io.File;
  4. import java.io.FileWriter;
  5. import java.io.IOException;
  6.  
  7. import javax.imageio.ImageIO;
  8. import javax.swing.JButton;
  9. import javax.swing.JCheckBox;
  10. import javax.swing.JFileChooser;
  11. import javax.swing.JFrame;
  12. import javax.swing.JOptionPane;
  13. import javax.swing.UIManager;
  14. import javax.swing.UnsupportedLookAndFeelException;
  15.  
  16. public class ImageBrightnessDetector {
  17. private JFrame frame = new JFrame("ImageBrightnessDetector");
  18. private JFileChooser fileChooser = new JFileChooser();
  19. private JCheckBox checkBox;
  20. private File[] files;
  21.  
  22. public static void main(String[] args) {
  23. ImageBrightnessDetector ibd = new ImageBrightnessDetector();
  24. ibd.frame.setVisible(true);
  25. }
  26.  
  27. public ImageBrightnessDetector() {
  28. try {
  29. UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());
  30. } catch (ClassNotFoundException | InstantiationException | IllegalAccessException
  31. | UnsupportedLookAndFeelException e) {
  32. e.printStackTrace();
  33. }
  34. initialize();
  35. }
  36.  
  37. private void initialize() {
  38. frame.setBounds(400, 300, 400, 400);
  39. frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
  40. frame.getContentPane().setLayout(null);
  41.  
  42. checkBox = new JCheckBox("Add File names to output");
  43. checkBox.setBounds(50, 100, 200, 20);
  44. checkBox.setVisible(true);
  45. frame.getContentPane().add(checkBox);
  46.  
  47. JButton buttonInput = new JButton("Select Input");
  48. buttonInput.setBounds(50, 200, 100, 30);
  49. buttonInput.addActionListener(e -> files = getInputFiles());
  50. buttonInput.setVisible(true);
  51. frame.getContentPane().add(buttonInput);
  52.  
  53. JButton buttonOutput = new JButton("Save Result");
  54. buttonOutput.setBounds(250, 200, 100, 30);
  55. buttonOutput.addActionListener(e -> {
  56. File outputFile = getOutputFile();
  57. if (outputFile == null) return;
  58.  
  59. int[] avgLuminance = new int[files.length];
  60. try {
  61. for (int i = 0; i < files.length; i++)
  62. avgLuminance[i] = calcAverageBrightness(ImageIO.read(files[i]));
  63. writeOutput(outputFile, avgLuminance);
  64. } catch (IOException exc) {
  65. exc.printStackTrace();
  66. JOptionPane.showConfirmDialog(frame, "An error occured: " + exc.getMessage(), "Error", JOptionPane.OK_OPTION, JOptionPane.ERROR_MESSAGE);
  67. return;
  68. }
  69. });
  70. buttonOutput.setVisible(true);
  71. frame.getContentPane().add(buttonOutput);
  72. }
  73.  
  74. private void writeOutput(File outputFile, int[] values) throws IOException {
  75. BufferedWriter writer = new BufferedWriter(new FileWriter(outputFile));
  76. for (int i = 0; i < values.length; i++) {
  77. if (checkBox.isSelected())
  78. writer.write(files[i].getName() + ";" + values[i]);
  79. else
  80. writer.write(values[i] + "");
  81. writer.newLine();
  82. }
  83. writer.close();
  84. }
  85.  
  86. private int calcAverageBrightness(BufferedImage img) {
  87. long totalLuminance = 0;
  88. for (int color : img.getRGB(0, 0, img.getWidth(), img.getHeight(), null, 0, img.getWidth())) {
  89. int red = (color >>> 16) & 0xFF;
  90. int green = (color >>> 8) & 0xFF;
  91. int blue = (color >>> 0) & 0xFF;
  92.  
  93. totalLuminance += (red * 0.2126f + green * 0.7152f + blue * 0.0722f) / 255 * 100;
  94. }
  95. return (int) (totalLuminance / (img.getWidth() * img.getHeight()));
  96. }
  97.  
  98. private File getOutputFile() {
  99. fileChooser.setMultiSelectionEnabled(false);
  100. if (fileChooser.showSaveDialog(frame) == JFileChooser.APPROVE_OPTION)
  101. return fileChooser.getSelectedFile();
  102. else return null;
  103. }
  104.  
  105. private File[] getInputFiles() {
  106. fileChooser.setMultiSelectionEnabled(true);
  107. if (fileChooser.showOpenDialog(frame) == JFileChooser.APPROVE_OPTION)
  108. return fileChooser.getSelectedFiles();
  109. else return new File[0];
  110. }
  111. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement