Utworzono ciąg znaków base64 ze zdjęcia na karcie SD za pomocą tego (poniższego) kodu i działa, ale kiedy próbuję go zdekodować (jeszcze dalej poniżej), otrzymuję numer java.lang.outOfMemoryException
, prawdopodobnie dlatego, że nie dzielę łańcucha na rozsądny rozmiar, zanim go zdekoduję, tak jak ja, zanim go zakoduję.Dekodowanie dużego łańcucha base64
byte fileContent[] = new byte[3000];
StringBuilder b = new StringBuilder();
try{
FileInputStream fin = new FileInputStream(sel);
while(fin.read(fileContent) >= 0) {
b.append(Base64.encodeToString(fileContent, Base64.DEFAULT));
}
}catch(IOException e){
}
Powyższy kod działa dobrze, ale problem pojawia się, gdy próbuję zdekodować obraz za pomocą następującego kodu;
byte[] imageAsBytes = Base64.decode(img.getBytes(), Base64.DEFAULT);
ImageView image = (ImageView)this.findViewById(R.id.ImageView);
image.setImageBitmap(
BitmapFactory.decodeByteArray(imageAsBytes, 0, imageAsBytes.length)
);
Próbowałem w ten sposób zbyt
byte[] b = Base64.decode(img, Base64.DEFAULT);
Bitmap bitmap = BitmapFactory.decodeByteArray(b, 0, b.length);
image.setImageBitmap(bitmap);
Teraz zakładam, że muszę podzielić ciąg na sekcje, jak mojego kodu kodowania obrazu, ale nie mam pojęcia, jak go o to robi .
To niesamowite rozwiązanie! Działa doskonale – jcw