Advertisement
CeaselessSoul

Image Color Frequency Program

Feb 25th, 2020
219
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Java 2.01 KB | None | 0 0
  1. // Classes
  2. import java.io.File;
  3. import java.io.FileWriter;
  4. import java.util.HashMap;
  5. import java.io.IOException;
  6. import javax.imageio.ImageIO;
  7. import java.awt.image.BufferedImage;
  8.  
  9. public class ImageReader {
  10.     BufferedImage Image;
  11.     HashMap<String, HashMap<Integer, Integer>> Channels = new HashMap<>();
  12.  
  13.     public ImageReader(String path) throws IOException {
  14.         Image = ImageIO.read(new File("images/" + path));
  15.  
  16.         // Initialize Channels
  17.         Channels.put("R", new HashMap<>());
  18.         Channels.put("G", new HashMap<>());
  19.         Channels.put("B", new HashMap<>());
  20.     }
  21.  
  22.     public void read() throws IOException {
  23.         for (int i = 0; i < Image.getWidth(); i++) {
  24.             for (int j = 0; j < Image.getHeight(); j++) {
  25.                 for (HashMap.Entry<String, Integer> entry : readPixel(Image.getRGB(i, j)).entrySet()) {
  26.                     Channels.get(entry.getKey()).merge(entry.getValue(), 1, Integer::sum);
  27.                 }
  28.             }
  29.         }
  30.  
  31.         generateFile();
  32.     }
  33.  
  34.     public void generateFile() throws IOException {
  35.         new File("C:\\Users\\Larry\\Desktop\\histogram.txt");
  36.         FileWriter histogram = new FileWriter("C:\\Users\\Larry\\Desktop\\histogram.txt");
  37.  
  38.         // Display Histogram
  39.         String content = String.valueOf(buildFrequency("R")) + buildFrequency("G") + buildFrequency("B");
  40.         histogram.write(content);
  41.  
  42.         histogram.close();
  43.     }
  44.  
  45.     private StringBuilder buildFrequency(String key) {
  46.         StringBuilder component = new StringBuilder();
  47.         HashMap<Integer, Integer> channel = Channels.get(key);
  48.  
  49.         // Build
  50.         component.append("Histogram data for ").append(key).append(" channel:\n");
  51.  
  52.         for (int channelKey = 0; channelKey <= 255; channelKey++) {
  53.             Integer frequency = channel.get(channelKey);
  54.             component.append(channelKey).append(" -> ").append(frequency != null ? frequency : 0).append("\n");
  55.         }
  56.  
  57.         return component.append("\n");
  58.     }
  59.  
  60.     private HashMap<String, Integer> readPixel(int pixel) {
  61.         HashMap<String, Integer> rgb = new HashMap<>();
  62.  
  63.         rgb.put("R", pixel >> 16 & 255);
  64.         rgb.put("G", pixel >> 8 & 255);
  65.         rgb.put("B", pixel & 255);
  66.  
  67.         return rgb;
  68.     }
  69. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement