Untitled
unknown
plain_text
a year ago
4.0 kB
12
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