2013-03-28 6 views
14

chcę przekonwertować base64 zakodowany ciąg do bitmapy, więc można umieścić go w widoku obrazu, ale coraz błąd jakAndroid przekonwertować ciąg base64 zakodowane w polu widzenia obrazu

D/skia (7490) --- decoder-> dekodowania powrócił fałszywe i bitmapy zwraca wartość null

Mój kod to:

byte[] imageAsBytes = Base64.decode(imageData); 

image.setImageBitmap(BitmapFactory.decodeByteArray(imageAsBytes, 0, imageAsBytes.length)); 
+0

Skąd otrzymałeś łańcuch base64? Jesteś pewien, że jest ważny? – draksia

+0

Otrzymuję ciąg base64 z usługi sieci web. Jak możemy to sprawdzić, czy jest ważne? – Baskar

+1

Czy możesz opublikować kod, który pobiera ciąg Base64? – draksia

Odpowiedz

38

flirtuje trzeba sprawdzić, że ciąg chcesz dekodować jest vaild i ma zamierzoną wartość być dekodowane i aby to zrobić, możesz zrobić coś jak poniżej:

filePath= Environment.getExternalStorageDirectory() 
         + "/SaudiScore/temporary_holder.jpg"; 
Bitmap selectedImage = BitmapFactory.decodeFile(filePath); 
ByteArrayOutputStream stream = new ByteArrayOutputStream(); 
selectedImage.compress(Bitmap.CompressFormat.JPEG, 100, stream); 
byte[] byteArray = stream.toByteArray(); 
String strBase64=Base64.encodeToString(byteArray, 0); 

następnie można zdekodować ciąg znaków, który po prostu zakodowane i uzyskać obraz z powrotem, wykonując coś jak następuje:

byte[] decodedString = Base64.decode(strBase64, Base64.DEFAULT); 
Bitmap decodedByte = BitmapFactory.decodeByteArray(decodedString, 0, decodedString.length); 
image.setImageBitmap(decodedByte); 
+0

Właściwie otrzymuję ciąg kodujący, wysyłając do serwisu internetowego i z powrotem do urządzenia, tym razem otrzymuję ten błąd. – Baskar

+1

Mam ten sam błąd wcześniej, miałem do czynienia z tym samym problemem, Wszystko, co musisz zrobić, to sprawdzić rozmiar ciągu, który faktycznie był obraz zakodowany przed zapisaniem go w zdalnej bazie danych jest taki sam jak rozmiar ciąg, który otrzymałeś, gdy już uzyskasz dokładnie to samo, otrzymasz obraz używając powyższego kodu. –

+0

Porównuję długość i rozmiar ciągu również tego samego, ale nie mogę wyświetlić w widoku obrazu. – Baskar

1
String base = "Base64 string values of some image"; 

byte[] imageAsBytes = Base64.decode(base.getBytes(), Base64.DEFAULT); 

ImageView image = (ImageView) this.findViewById(R.id.imageView1); 

image.setImageBitmap(BitmapFactory.decodeByteArray(imageAsBytes, 0, imageAsBytes.length)); 

Spróbuj tego kodu.

11
byte[] decodedString = Base64.decode(mBase64string, Base64.DEFAULT); 
Bitmap decodedByte = BitmapFactory.decodeByteArray(decodedString, 0,decodedString.length); 
mImageView.setImageBitmap(decodedByte); 
Powiązane problemy