import java.util.ArrayList; import java.io.File; import java.awt.Color; import java.awt.image.BufferedImage; import javax.imageio.ImageIO; /** * Beschreiben Sie hier die Klasse Image. * * @author Alexander Kimmig * @version 1.0 */ public class Image { /** * Liest eine JPG-Bilddatei ein und gibt diese als ArrayList von RGB-Objekten zurück * * @param filename Dateiname die eingelesen werden soll * @return ArrayList der einzelnen Pixelwerte * @throws Exception */ public static ArrayList readFile(String filename) throws Exception { ArrayList points = new ArrayList<>(); File file= new File(filename); BufferedImage img = ImageIO.read(file); for (int y = 0; y < img.getHeight(); y++) { for (int x = 0; x < img.getWidth(); x++) { points.add(new RGB(img.getRGB(x,y))); } } return points; } /** * Liest eine JPG-Bilddatei ein und gibt diese als ArrayList von RGB-Objekten zurück * * @param filename Dateiname die eingelesen werden soll * @return BufferedImage * @throws Exception */ public static BufferedImage loadFile(String filename) throws Exception { ArrayList points = new ArrayList<>(); File file= new File(filename); return ImageIO.read(file); } /** * Schreibt die RGB-Daten in eine Datei * * @param input Dateiname der ursprünglichen Datei (wird für Dimensionen gebraucht) * @param output Dateiname der neuen Datei * @param data RGB-Daten der einzelnen Pixel * @return BufferedImage */ public static BufferedImage writeFile(String input, String output, ArrayList data) throws Exception { File file = new File(input); BufferedImage img = ImageIO.read(file); int w = img.getWidth(); int y = 0, x = 0; for (RGB p : data) { img.setRGB(x, y, p.toInt()); if (++x >= w) { x = 0; ++y; } } if (output != "") { File f = new File(output); ImageIO.write(img, "jpg", f); } return img; } /** * Schreibt die RGB-Daten in eine Datei anhand der Quantifizierungs-Punkte * Jeder Pixel bekommt die Farbe des nächstliegenden Quantifizierungs-Punktes. * * @param input Dateiname der ursprünglichen Datei (wird für Dimensionen gebraucht) * @param output Dateiname der neuen Datei * @param data RGB-Daten der einzelnen Pixel * @param quants Quantifizierungs-Punkte * @return BufferedImage */ public static BufferedImage writeFile(String input, String target, ArrayList data, ArrayList quants) throws Exception { ArrayList q = new ArrayList<>(); // Mappe punkte auf quantifizierte Punkte for (RGB p : data) { q.add(Quant.findNearest(quants, p)); } // schreibe Datei return writeFile(input, target, q); } }