# Bitmap aus Datei erstellen



## weired (6. Jul 2010)

Hallo,
ich habe eine Datei, wo ich neben einem verkleinerten Bitmap weitere Informationen drin speichere, man stelle sich den Aufbau wie folgt vor (Bitmap+metainfo+random things). Wenn ich nun die informationen aus der Datei extrahiere und das Bitmap mit

```
bmp = BitmapFactory.decodeByteArray(buffer, 0, buffer.length, null);
```
erstelle bekomme ich null zurück und nicht das gewünschte Bild. Wenn ich nur das Bitmap in der Datei speichere funktioniert es hingegen. Allerdings ist es notwendig, dass ich sowohl bmp als auch die anderen informationen in einer datei habe. 
Weiß jemand warum ich dieses Problem bekomme und wie ich dieses umgehen kann?

Vielen Dank


----------



## Gastredner (6. Jul 2010)

Du musst die Daten des Bitmaps von allen anderen Daten trennen, bevor du es dekodierst. Schließlich kann der Dekodierungsalgorithmus ja nicht aus dem Nichts heraus wissen, dass du mehr als nur die Bitmap-Daten übergibst.


----------



## weired (6. Jul 2010)

Ja, das habe ich auch gemacht. in dem buffer sollten im moment nur die daten für das bitmap drin stehen.


----------



## weired (7. Jul 2010)

so ich habe jetzt nochmal einiges rumprobiert, und es scheint nicht daran zu liegen wie ich es raushole sondern wie man das Bitmap in die Datei reinschreibt. 
Folgendes funkioniert:

```
ByteArrayOutputStream baos = new ByteArrayOutputStream();
bmp.compress(Bitmap.CompressFormat.JPEG, 100, baos);
File f = new File(filename);
byte[] bu = baos.toByteArray();
fos.write(bu);
[\JAVA]
Wenn ich den Stream aber zwischendurch nochmal in einen String umwandele funktioniert es nicht mehr:
[code=Java]
ByteArrayOutputStream baos = new ByteArrayOutputStream();
bmp.compress(Bitmap.CompressFormat.JPEG, 100, baos);
File f = new File(filename);
byte[] bu = baos.toByteArray();
String sbu = new String(bu);
fos.write(bu.getBytes());
[\JAVA]
Läuft bei der Byte[]->String umwandlung irgendwas schief? Eigentlich sollte doch der Inhalt des byte[] einfach als String interpretiert werden......
```


----------



## weired (7. Jul 2010)

so ich habe jetzt nochmal einiges rumprobiert, und es scheint nicht daran zu liegen wie ich es raushole sondern wie man das Bitmap in die Datei reinschreibt. 
Folgendes funkioniert:

```
ByteArrayOutputStream baos = new ByteArrayOutputStream();
bmp.compress(Bitmap.CompressFormat.JPEG, 100, baos);
File f = new File(filename);
byte[] bu = baos.toByteArray();
fos.write(bu);
```
Wenn ich den Stream aber zwischendurch nochmal in einen String umwandele funktioniert es nicht mehr:

```
ByteArrayOutputStream baos = new ByteArrayOutputStream();
bmp.compress(Bitmap.CompressFormat.JPEG, 100, baos);
File f = new File(filename);
byte[] bu = baos.toByteArray();
String sbu = new String(bu);
fos.write(bu.getBytes());
```
Läuft bei der Byte[]->String umwandlung irgendwas schief? Eigentlich sollte doch der Inhalt des byte[] einfach als String interpretiert werden......


----------



## Marco13 (7. Jul 2010)

Hab' das jetzt nicht im Detail nachvollzogen (es klang so schräg :autsch: ) aber ein String und ein byte[] array sind NICHT einfach autatuschbar. Wenn man aus einem byte[] array einen String macht (oder umgekehrt) kommen da viele ""Unwägbarkeiten"" dazu, wie Encodings und Charsets (für eine Konvertierung von/in Unicode und so). Wenn du byte[]-Daten hast, speichere sie als byte[], und nicht als String.


----------

