Frage

Ich habe eine Reihe von Bildern in der Datenbank meines Servers als Byte -Arrays gespeichert, die ich in meiner Android -App konsumieren möchte.

Die Byte -Arrays wurden aus den Bildern in einer Windows Phone 7 -App erstellt. Daher mit .NETs WritableBitMap (WBMP), um in einem IsolatedStorageFilestream (ISFS) zu speichern:

     wbmp.SaveJpeg(isfs, newWidth, newHeight, 0, 90);

In der Android -App habe ich ein ImageView -Widget, mit dem ich eine der Bilder anzeigen möchte. Ich habe versucht, Bitmapfactory zu verwenden, um das Byte -Array (Nutzlast) zu dekodieren:

    Bitmap bmp = BitmapFactory.decodeByteArray(payload, 0, payload.length);
    img1.setImageBitmap(bmp); 

Aber das funktioniert nicht - keine Bildanzeigen und BMP ist null, wenn ich durch den Debugger trete. Dies scheint darauf hinzudeuten, dass Bitmapfaktor das Byte -Array nicht richtig dekodieren konnte.

Für Windows Phone 7 lade ich einfach das Byte [] (Realität) in einen MemoryStream (mstream) und rufe dann die SetSource -Methode von Bitmap (BMP) mit diesem Speicherstream auf:

    mstream = new MemoryStream(reality);
    bmp.SetSource(mstream);

Also habe ich auf Android versucht, das Byte -Array in eine Memory -Datei zu lesen und dann den InputStream der MemoryFile mit Bitmapfactory zu laden:

    MemoryFile mf;
        try {
            mf = new MemoryFile("myFile", payload.length);
            mf.writeBytes(payload, 0, 0, payload.length);
            InputStream is = mf.getInputStream();
            Bitmap bmp = BitmapFactory.decodeStream(is);
            img1.setImageBitmap(bmp); 
        } catch (IOException e) {               
            e.printStackTrace();
        }

Aber das funktioniert immer noch nicht.

Wie kann ich ein Byte -Array in diesem Format in Android erfolgreich laden, um das Bild anzuzeigen?

War es hilfreich?

Lösung

Laut Bing und hier zeigt dieser Fehler wahrscheinlich ein ungültiges Bild an. Ich würde sorgfältig überprüfen, ob Sie die richtige URL herunterladen. Wenn ja, dann versuchen Sie, den Inhalt dieses Byte [] in das Protokoll zu drucken (oder überprüfen Sie es im Debugger). Sehen Sie, ob es sich um eine HTML -Nachricht handelt.

Bingo! Basierend auf Ihren zusätzlichen Informationen sind dies Basis64-kodierte Daten. Was Sie gepostet haben, sah zu einem einfachen Text aus, also habe ich versucht, ihn sowohl Uudecode als auch Base64 -D auf meiner Linux -Maschine zu leiten. Letzteres arbeitete und generierte eine Datei, die als JPEG erkannt wurde.

Das Dekodieren sollte recht einfach sein. Ändere das:

Bitmap bmp = BitmapFactory.decodeByteArray(payload, 0, payload.length);
img1.setImageBitmap(bmp); 

dazu:

import android.util.Base64;
...
payload = Base64.decode(payload, Base64.Default);
Bitmap bmp = BitmapFactory.decodeByteArray(payload, 0, payload.length);
img1.setImageBitmap(bmp); 

Gib mir Bescheid!

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top