Hallo!
Ich habe eine Datei, in der mehrere Bilder enthalten sind. Sie sind im JPG-Format und durch zwei "\r\n" getrennt.
Nun möchte ich diese beiden Bilder auslesen in ein BufferedImage und sie wieder speichern. Mein Versuch dazu sieht so aus:
In meiner "multiple.txt" sind zwei Bilder:
1. Ein grünes Rechteck
2. Ein rotes Rechteck
Wenn ich den obigen Code allerdings ausführe, erhalte ich zweimal das grüne Rechteck.
Ich habe das Ganze mal verpackt. In der angehängten Datei findet ihr:
- green.jpg
- red.jpg
- MultipleRandomAccessRead.java (und .class)
- multiple.txt (wird erstellt in MultipleRandomAccessRead.createFile)
Es wäre nett, wenn mir jemand etwas auf die Sprünge helfen könnte
PS: Falls das was zur Sache tut: Ich benutze ein RandomAccessFile-Objekt anstatt eines File-Objektes, da in meinen "richtigen" Dateien noch mehr Zeugs steht und ich dann sowieso hin- und herspringen muss. Die obige Datei ist nur eine Vereinfachung
Ich habe eine Datei, in der mehrere Bilder enthalten sind. Sie sind im JPG-Format und durch zwei "\r\n" getrennt.
So ist sie aufgebaut:
Eine Beispieldatei sieht im Editor so aus:
(am Ende von Zeile 1. sind zwei "\r\n", deswegen ist Zeile 2 leer)
Java:
<binäre Bild-Daten>\r\n\r\n<binäre Bild-Daten>\r\n\r\n<binäre ...
Eine Beispieldatei sieht im Editor so aus:
Java:
ÿØÿà JFIF ...ÿÙ
ÿØÿà JFIF ...ÿÙ
Nun möchte ich diese beiden Bilder auslesen in ein BufferedImage und sie wieder speichern. Mein Versuch dazu sieht so aus:
Java:
try
{
RandomAccessFile file = new RandomAccessFile("multiple.txt", "rw");
FileImageInputStream input = new FileImageInputStream(file);
ImageReader reader = ImageIO.getImageReadersByFormatName("jpg").next();
reader.setInput(input);
BufferedImage i = reader.read(0);
save(i, "green_output.jpg");
input.skipBytes(4); //2x \r\n
i = reader.read(0);
save(i, "red_output.jpg");
}
catch (FileNotFoundException e)
{
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
In meiner "multiple.txt" sind zwei Bilder:
1. Ein grünes Rechteck
2. Ein rotes Rechteck
Wenn ich den obigen Code allerdings ausführe, erhalte ich zweimal das grüne Rechteck.
Ich habe das Ganze mal verpackt. In der angehängten Datei findet ihr:
- green.jpg
- red.jpg
- MultipleRandomAccessRead.java (und .class)
- multiple.txt (wird erstellt in MultipleRandomAccessRead.createFile)
Es wäre nett, wenn mir jemand etwas auf die Sprünge helfen könnte
PS: Falls das was zur Sache tut: Ich benutze ein RandomAccessFile-Objekt anstatt eines File-Objektes, da in meinen "richtigen" Dateien noch mehr Zeugs steht und ich dann sowieso hin- und herspringen muss. Die obige Datei ist nur eine Vereinfachung