Untitled
unknown
plain_text
5 months ago
4.0 kB
11
Indexable
import java.io.IOException; import java.nio.file.Files; import java.nio.file.Path; import java.nio.file.StandardOpenOption; import java.text.SimpleDateFormat; import java.util.Date; public class Bild { private String format; // Bildformat (z. B. P2) private int breite; // Breite des Bildes private int hoehe; // Höhe des Bildes private int maximalwert; // Maximaler Pixelwert (z. B. 255) private int[][] daten; // 2D-Array zum Speichern der Bilddaten // Methode zum Einlesen eines PGM-Bildes public void leseBild(String dateiName) throws IOException { var zeilen = Files.readAllLines(Path.of(dateiName)); if (zeilen.isEmpty()) { throw new IOException("Die Datei ist leer!"); } format = zeilen.get(0).trim(); if (!"P2".equals(format)) { throw new IOException("Ungültiges Format! Nur P2 wird unterstützt."); } String[] dimensionen = zeilen.get(1).split("\\s+"); if (dimensionen.length != 2) { throw new IOException("Ungültige Bilddimensionen in der Datei."); } breite = Integer.parseInt(dimensionen[0]); hoehe = Integer.parseInt(dimensionen[1]); maximalwert = Integer.parseInt(zeilen.get(2).trim()); daten = new int[hoehe][breite]; int zeilenIndex = 3; for (int i = 0; i < hoehe; i++) { String[] pixelZeile = zeilen.get(zeilenIndex++).trim().split("\\s+"); if (pixelZeile.length != breite) { throw new IOException("Pixelanzahl stimmt nicht mit der Breite überein."); } for (int j = 0; j < breite; j++) { daten[i][j] = Integer.parseInt(pixelZeile[j]); if (daten[i][j] < 0 || daten[i][j] > maximalwert) { throw new IOException("Pixelwert außerhalb des erlaubten Bereichs."); } } } } // Methode zur Ausgabe der Bildinformationen public void printBildInfo() { System.out.println("Format: " + format); System.out.println("Breite: " + breite); System.out.println("Höhe: " + hoehe); System.out.println("Maximalwert: " + maximalwert); System.out.println("Daten:"); for (int[] zeile : daten) { for (int pixel : zeile) { System.out.printf("%3d ", pixel); } System.out.println(); } } // Methode zum Rotieren des Bildes um 90 Grad gegen den Uhrzeigersinn public void rotiereBild() { int[][] rotiertesBild = new int[breite][hoehe]; for (int i = 0; i < hoehe; i++) { for (int j = 0; j < breite; j++) { rotiertesBild[breite - j - 1][i] = daten[i][j]; } } daten = rotiertesBild; // Breite und Höhe vertauschen int temp = breite; breite = hoehe; hoehe = temp; } // Methode zum Speichern des Bildes im PGM-Format public void schreibeBild(String verzeichnis) throws IOException { SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd"); String dateiname = dateFormat.format(new Date()) + ".pgm"; Path dateiPfad = Path.of(verzeichnis, dateiname); // Header schreiben StringBuilder sb = new StringBuilder(); sb.append(format).append("\n") .append(breite).append(" ").append(hoehe).append("\n") .append(maximalwert).append("\n"); // Pixelwerte schreiben for (int[] zeile : daten) { for (int pixel : zeile) { sb.append(pixel).append(" "); } sb.append("\n"); } // Datei schreiben Files.write(dateiPfad, sb.toString().getBytes(), StandardOpenOption.CREATE); } }
Editor is loading...
Leave a Comment