# Bild in .txt speichern und wieder als Bild speichern



## Creativ (4. Dez 2008)

Hi,
Bastel gerade an meiner Objekt-Verwaltung weiter und wollte jetzt, dass man da auch ein Backup machen kann.
Die Objekte, Kategorien, Tags usw. werden schon gespeichert und können auch wieder importiert werden.
Jetzt scheiter ich aber an den Bildern.
Ich wollte die Bilder auch mit in das backup reinpacken und habe dazu folgenden Code geschrieben:

```
for(int i=0;i<pictures.size();i++) {
			File pic = pictures.get(i);
			
			stringBuilder.append("\n:::FILE:::"+pic.getName()+"\n");
			
			try{
				FileInputStream reader = new FileInputStream(pic);
				int c = 0;
				while( (c = reader.read()) != -1 ) {
					stringBuilder.append((char)c);
				}
				reader.close();
			}catch(FileNotFoundException e) {
				System.out.println(e.getMessage());
			}catch(IOException e) {
				System.out.println(e.getMessage());
			}
		}
```

Und dann erstelle ich das Bild wieder folgendermaßen:

```
File newPic = new File(fileName);
				try{
					FileOutputStream writer = new FileOutputStream(newPic);
					
					for (int j=0;j < fileText.length(); j++){
					      writer.write((byte)fileText.charAt(j));
					    }

					writer.close();
				}catch(FileNotFoundException e) {
					System.out.println(e.getMessage());
				}catch(IOException e) {
					System.out.println(e.getMessage());
				}
```

fileText enthält den Datei-Text den ich davor in der Datei gespeichert hatte.

Wenn ich mir die Bilder dann aber angucke, sind sie einfach nur Schwarz.
Warum, was mache ich falsch?

Gruß,
Dennis


----------



## Gast2 (4. Dez 2008)

Creativ hat gesagt.:
			
		

> ```
> while( (c = reader.read()) != -1 ) {
> stringBuilder.append((char)c);
> }
> ...



einen grundlegenden Anfängerfehler ... der Rechner (bzw. die CPU) versteht nur 0 oder 1 ... das wird gerne zu im 8er Pack als Byte zusammen gefasst ... und dabei kommen dann entsprechende Werte (Zahlen) raus ... da komt dann die ASC-II Tabelle raus ... foltere dazu mal Google oder Wikipedia

*Exkurs #1*

das Dumme ist das unser kleines, menschliches Gehirn aber nur 62 (gut sind etwas mehr) von den 256 Zahlen was anfangen kann ... ich spreche hier jetzt gezielt auf Buchstaben (Groß/Klein) und Zahlen an ... damit stehen noch eine Menge an Werten zur Verfügung ... in Uraltzeiten (vor userer [deiner/meiner] Geburt) wurde für Drucker diverse Steuerzeichen definiert ... und eben aus diesem Werte-Vorrat genommen ... dies sind alle Zeichen kleiner als 32 (32 ist übrigens das Leerzeichen) ... diese Zeichen sind LineFeed 0x0a (neue Zeile) - Tabulator 0x09 etc.

*Exkurs #2*

unabhängig von von den tausenden Bild-Formaten werden die einzelnen Helligkeiten (vgl. Graubild) von 0 bis 255 in Bytes gespeichert ... das ganze für jeden Farbkanal und für jeden Pixel ... wenn Du jetzt Exkurs #1 verstanden hast, dürfte Dir auffallen das hier die Werte eine andere Bedeutung hat als in einer Text-Datei

*Fazit*

Du speicherst ein Bild in einer Text-Datei ... das funktioniert nicht weil Du damit die Funktion der Werte uminterpretierst ... und der Rechner ist eh strohdumm - der macht nur das was Du sagst

wenn Du jetzt einen StringBuilder verwendest um darin einzelne Char's zu speichern, geht der Rechner davon aus das Du ein Text erstellen willst ... das das Char ursprünglich aus einem Bild stammt, ist dem Rechner egal ... das hat er in der nächsten Zeile schon wieder vergessen

hand, mogel


----------



## Creativ (4. Dez 2008)

Hi,
Danke für deine Antwort und Erklärung 

Habe es jetzt einfach mit einem Zip-File gelöst 

Gruß,
Dennis


----------

