base64string zu einem ImageView?

  • Antworten:5
  • OffenNicht stickyBentwortet
Gelöschter Account
  • Forum-Beiträge: 70

30.08.2016 14:04:45 via Website

Hallo,
weis jemand wie ich einen base64string zu einem ImageView mache?
Hab mich im Internet umgesehen aber komme noch nicht sorecht damit zurecht.
Das ist was ich habe:

    ImageView picture = row.FindViewById<ImageView>(Resource.Id.group_pic);
    string base64string = "/9j/4AAQSkZJRgABAQAAAQABAAD/2wCEAAkGBxQSEhUUFRUYHSg blablbablabla"
    byte[] bytes = Encoding.ASCII.GetBytes(base64string);
    picture.SetImageBitmap(BitmapFactory.DecodeByteArray(bytes, 0, bytes.Length));

Output ist ein ImageView das irgendwie gar nichts zeigt. Error wiedermal nicht vorhanden.

  • Forum-Beiträge: 2.210

30.08.2016 14:20:31 via Website

Hallo Lukas

wie du weisst - bei mir ist nix mit C# :-)

Was mir allerdings "aufgestossen" ist , ist das "String" ..
Ich wage mal zu vermuten , dass das eher binary sein muss :-)

— geändert am 30.08.2016 14:21:51

Liebe Grüße - Stefan
[ App - Entwicklung ]

Pascal P.
  • Mod
  • Blogger
  • Forum-Beiträge: 9.302

30.08.2016 14:21:36 via Website

Müsste so gehen, hab ich selber schon so gemacht (nur in einer C# desktop)
Ist denn der Base64 string korrekt?
Prüfe das mal oder erstelle einen neuen.
@Stefan: Kann man schon so machen, erst kodiert man das Bild in einen Base64 string, schick diesen dann durch die gegend und am Ende macht man wieder binary draus.

Zum test kannst du ja mal ne html seite machen und den base64 in ein img html tag eintragen. Wenn im html dann was zu sehen ist, dann ist der string in Ordnung

— geändert am 30.08.2016 14:23:33

LG Pascal //It's not a bug, it's a feature. :) ;)

Gelöschter Account
  • Forum-Beiträge: 70

30.08.2016 15:11:30 via Website

So funktioniert es einwandfrei hab die ImageView auf 70, 70 größe gestellt und erstelle eine Bitmap mit der Exact der selben größe:

            string encodedDataString = "/9j/4AAQSkZJRgABAQAAAQABAAD/2wCEAAkGBxQSEhUUEhQUFR........";
            ImageView picture = row.FindViewById<ImageView>(Resource.Id.group_pic);
            byte[] bytes = Base64.Decode(encodedDataString, Base64Flags.Default);
            Bitmap bitmap = BitmapFactory.DecodeByteArray(bytes, 0, bytes.Length);
            var bitmapScalled = Bitmap.CreateScaledBitmap(bitmap, 70, 70, true);
            picture.SetImageBitmap(bitmapScalled);

Das einzige Problem hier:
Wie man sieht ist der string encodedDataString hardgecoded und nicht der String von meiner Datenbank.
Tausche ich diesen String mit den meiner Datenbank aus und führe den Code aus kommt immer dieser Error:

Attempt to invoke virtual method 'int android.graphics.Bitmap.getHeight()' on a null object reference

Falls ihr denkt dass der base64string den ich von meiner Datenbank hole eventuell falsch ist:
Nein ist er nicht. Hab ihn mal als Toast ausgeben lassen und er ist genau dasselbe wie der hardgecodete:
image

Edit:
Kann es sein dass der base64string genau dieselben Zeilenumbrüche hat wie im Bild vom Toast ausgegeben?
Müsste man die Zeilenumbrüche nicht wegmachen und einen fortlaufenden string daraus machen?

— geändert am 30.08.2016 15:14:42

  • Forum-Beiträge: 2.210

30.08.2016 15:31:07 via Website

@Lukas

ich denke , dass die Fehlermeldung daher rührt , weil im Imageheader kein gültiges Size erkannt wurde.
Zusätzliche Zeilenumbrüche generieren dir natürlich eine falsche Berechnungssumme.

Liebe Grüße - Stefan
[ App - Entwicklung ]

Gelöschter Account
  • Forum-Beiträge: 70

30.08.2016 15:41:42 via Website

Ok Leute etwas war jetzt weird. Habe die base64strings nochmal neu in meine Datenbank geladen.
Aufeinmal funktioniert es. Funktioniert Einwand frei. War wohl irgendwo der Wurm drin den ich unabsichtlich machte.
So der funktionierende Code:

    ImageView picture = row.FindViewById<ImageView>(Resource.Id.group_pic);
    string base64string = mList[position].Picture;
    byte[] bytes = Base64.Decode(base64string, Base64Flags.Default);
    Bitmap bitmap = BitmapFactory.DecodeByteArray(bytes, 0, bytes.Length);
    var bitmapScalled = Bitmap.CreateScaledBitmap(bitmap, 70, 70, true);
    picture.SetImageBitmap(bitmapScalled);
    picture.Tag = position;

Setze auf beantwortet. Danke trotzdem für die Hilfe :)