Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- // Classes
- import java.io.File;
- import java.io.FileWriter;
- import java.util.HashMap;
- import java.io.IOException;
- import javax.imageio.ImageIO;
- import java.awt.image.BufferedImage;
- public class ImageReader {
- BufferedImage Image;
- HashMap<String, HashMap<Integer, Integer>> Channels = new HashMap<>();
- public ImageReader(String path) throws IOException {
- Image = ImageIO.read(new File("images/" + path));
- // Initialize Channels
- Channels.put("R", new HashMap<>());
- Channels.put("G", new HashMap<>());
- Channels.put("B", new HashMap<>());
- }
- public void read() throws IOException {
- for (int i = 0; i < Image.getWidth(); i++) {
- for (int j = 0; j < Image.getHeight(); j++) {
- for (HashMap.Entry<String, Integer> entry : readPixel(Image.getRGB(i, j)).entrySet()) {
- Channels.get(entry.getKey()).merge(entry.getValue(), 1, Integer::sum);
- }
- }
- }
- generateFile();
- }
- public void generateFile() throws IOException {
- new File("C:\\Users\\Larry\\Desktop\\histogram.txt");
- FileWriter histogram = new FileWriter("C:\\Users\\Larry\\Desktop\\histogram.txt");
- // Display Histogram
- String content = String.valueOf(buildFrequency("R")) + buildFrequency("G") + buildFrequency("B");
- histogram.write(content);
- histogram.close();
- }
- private StringBuilder buildFrequency(String key) {
- StringBuilder component = new StringBuilder();
- HashMap<Integer, Integer> channel = Channels.get(key);
- // Build
- component.append("Histogram data for ").append(key).append(" channel:\n");
- for (int channelKey = 0; channelKey <= 255; channelKey++) {
- Integer frequency = channel.get(channelKey);
- component.append(channelKey).append(" -> ").append(frequency != null ? frequency : 0).append("\n");
- }
- return component.append("\n");
- }
- private HashMap<String, Integer> readPixel(int pixel) {
- HashMap<String, Integer> rgb = new HashMap<>();
- rgb.put("R", pixel >> 16 & 255);
- rgb.put("G", pixel >> 8 & 255);
- rgb.put("B", pixel & 255);
- return rgb;
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement