Bitmap - ImageView

  • Antworten:19
Jakob N.
  • Forum-Beiträge: 282

16.05.2014, 19:44:24 via Website

Hallo Leute,

ich habe eine kleine App, die einen Base64-String von einer Datenbank ladet und in einer ImageView darstellt.

Das ganze funktioniert auch schon, aber leider nur mit .PNG-Dateien, bei .JPEG/.JPG zeigt die ImageView weiß an.

Code von meinem C#-Programm, dass das Bild in der Datenbank speichert.

imagestring = Convert.ToBase64String(File.ReadAllBytes(dlg.FileName));

In meiner Android-App konventiere ich dann wie folgt den String in eine Bitmap.

byte[] decodedString = Base64.decode(encodedString,
                    Base64.DEFAULT);
            Bitmap bitmap = BitmapFactory.decodeByteArray(decodedString, 0,
                    decodedString.length);
imgView.setImageBitmap(bitmap);

Hoffe, ihr könnt mir helfen!

LG Jakob

LG Jakob

Antworten
Pascal P.
  • Admin
  • Forum-Beiträge: 11.286

16.05.2014, 19:58:35 via Website

kannst du nicht noch angeben, welches Format das bild hat?
Das ist ja eigentlich wichtig.

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

Antworten
Jakob N.
  • Forum-Beiträge: 282

16.05.2014, 22:24:21 via Website

Leider weiß ich nicht wie das funktioniert, außerdem möchte ich das PNG und JPG funktioniert!

LG

LG Jakob

Antworten
Pascal P.
  • Admin
  • Forum-Beiträge: 11.286

17.05.2014, 07:51:10 via Website

Wieso machst du die Bilder in der DB nicht einheitlich.
Dein Write Programm könnte das Bild doch vor dem schreiben in die DB konvertieren.

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

Antworten
Jakob N.
  • Forum-Beiträge: 282

17.05.2014, 10:50:15 via Website

Wie meinst du in die DB komvertieren?

LG

LG Jakob

Antworten
Pascal P.
  • Admin
  • Forum-Beiträge: 11.286

17.05.2014, 13:10:48 via Website

Ja sowas in der Art. Erst das Bild in png Format umwandeln und dann erst als Base64 in der DB speichern
So umgehst du zwar das Problem, aber ich glaube, es sollte so wie du es hattest auch gehen, aber keine Ahnug warum.

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

Antworten
Jakob N.
  • Forum-Beiträge: 282

17.05.2014, 17:23:04 via Website

Weißt du zufällig wie ich das Bild in C# konvertieren kann?

Oder vielleicht in Android? Da ich sowieso vor habe, diese Funktion (Bild hochladen) in meiner Android-App zu implementieren.

LG Jakob

LG Jakob

Antworten
impjor
  • Forum-Beiträge: 1.793

17.05.2014, 23:35:50 via App

Normalerweise solle Bitmapfactory.decode* auch JPEGs erkennen können. Bist du sicher, dass das C#-Programm die Bilder richtig in die DB speichert?
Statt Base64 solltest du dir mal BLOB ansehen.

Liebe Grüße impjor.

Für ein gutes Miteinander: Unsere Regeln
Apps für jeden Einsatzzweck
Stellt eure App vor!

Antworten
Jakob N.
  • Forum-Beiträge: 282

18.05.2014, 15:33:18 via Website

Anfangs wollte ich BLOB verwenden, habe aber eine MySQL-Datenbank und ich kenne keine andere Möglichkeit als die Datenbankabfrage als JSON-Array auszugeben und mit JAVA einlesen. Das ganze hat mit BLOB nicht wirklich hingehauen!

LG Jakob

LG Jakob

Antworten
Jakob N.
  • Forum-Beiträge: 282

10.06.2014, 22:37:13 via Website

Hallo!

Ich hoffe mir kann irgendwer weiter helfen ...
Bin schon am verzweifeln mit dieser Bitmap ...

Habe jetzt meine JPG-Bilder einfach in PNG mittels Paint konvertiert... Die ImageView zeigt trotzdem nichts an.

Irgendwer eine Idee? Bitte helft mir!

LG Jakob

LG Jakob

Antworten
Andreas S.
  • Forum-Beiträge: 76

11.06.2014, 00:16:26 via App

das kommt mir bekannt vor..
hier mal ein link:

http://en.m.wikipedia.org/wiki/Most_significant_bit

BigInteger ist hier eventuell das richtige Stichwort..

also in Java das bytearray einlesen mit

new BigInteger(1,...bytes...);
an mehr kann ich mich gerade nicht erinnern

— geändert am 11.06.2014, 00:20:32

Antworten
Jakob N.
  • Forum-Beiträge: 282

11.06.2014, 06:44:22 via Website

Du glaubst also das irgendein Bit beim Speichern verloren geht? .. Lese das Bild mit C# ein und speicher es in die db.

LG Jakob

LG Jakob

Antworten
Andreas S.
  • Forum-Beiträge: 76

11.06.2014, 21:16:04 via App

Verloren geht nichts aber c# geht mit bytes anders um als Java wenn man das so sagen kann..
Bedeutet Java interpretiert das bytearray, das aus c# kommt, anders als erwartet.
ich bin mir nicht sicher ob das mit biginteger funktioniert aber probiers mal aus.

new BigInteger(1,bytes).toByteArray();

Antworten
Georg C.
  • Forum-Beiträge: 235

12.06.2014, 00:32:38 via Website

Hi,
leider muss ich raus!
Aber Du hast viele (VERMUTE) mit

... In meiner Android-App konventiere ich dann wie folgt den String
in eine Bitmap.

verwirt.
Weiterhin hat keiner darauf geachtet.
wie gesagt - muss raus.

LG
Georg

Ps.
Aber vieleicht - keien Ahnung

Sorry für Gramatik & Stilistik Fehler.

Antworten
Jakob N.
  • Forum-Beiträge: 282

12.06.2014, 06:41:41 via Website

Hallo Georg!

Was meinst du genau mit muss raus? Das verstehe ich nicht!

LG Jakob

LG Jakob

Antworten
Pascal P.
  • Admin
  • Forum-Beiträge: 11.286

12.06.2014, 10:23:00 via Website

Ist vielleicht die Bytekodierung anders?
Zb. LittleEndian und BigEndian?

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

Antworten
Jakob N.
  • Forum-Beiträge: 282

12.06.2014, 15:50:35 via Website

Hallo!

Das mit BigInteger hab ich in C# irgendwie nicht hinbekommen ...

Wie kann ich nachschauen ob es Little- oder BigEndian ist?

LG Jakob

LG Jakob

Antworten
Andreas S.
  • Forum-Beiträge: 76

12.06.2014, 19:33:15 via App

das mit biginteger sollst du ja in Java machen:)

— geändert am 12.06.2014, 19:34:23

Antworten
Georg C.
  • Forum-Beiträge: 235

12.06.2014, 21:24:52 via Website

Hi,
manchmal wirkt:

byte[] bytes = new byte[1024]; -> [xxx]
also - bei Dir
byte[] decodedString = new byte[1024]; -> [xxx]

wunder
Sonnst keine Ahnung - sorry.

Sorry für Gramatik & Stilistik Fehler.

Antworten
Jakob N.
  • Forum-Beiträge: 282

29.06.2014, 12:47:18 via Website

Hallo Leute :)

Danke nochmals für eure Hilfen!

Habe jetzt jedoch meine App etwas umgebaut und lade die Bilder auf einen SSH-Server und hole sie mir dann mit einem Async-Task und folgenden Code als Bitmap:

URL newurl = new URL(urlstring);
Bitmap img = BitmapFactory.decodeStream(newurl.openConnection()
                    .getInputStream());

LG Jakob

LG Jakob

Antworten