Я кодирую изображения, преобразовываю их в строку Base64 и сохраняю их в базе данных, но когда я пытаюсь декодировать строку и преобразовать ее обратно в растровое изображение, он возвращает нуль:

Вот код, который я использую в процессе декодирования:

private Bitmap decodeFile(String encod){
        Bitmap b = null;
        byte[] temp=null;
        temp = Base64.decode(encod, Base64.DEFAULT);
        ByteArrayInputStream imageStream = new ByteArrayInputStream(
                temp);
        //Decode image size
        BitmapFactory.Options o = new BitmapFactory.Options();
        o.inJustDecodeBounds = true;

        BitmapFactory.decodeStream(imageStream, null, o);
        int scale = 1;
        if (o.outHeight > 500 || o.outWidth > 500) {
            scale = (int)Math.pow(2, (int) Math.ceil(Math.log(500 /
                    (double) Math.max(o.outHeight, o.outWidth)) / Math.log(0.5)));
        }
        BitmapFactory.Options o1 = new BitmapFactory.Options();
        o1.inSampleSize = scale;
        b = BitmapFactory.decodeStream(imageStream, null, o1);
        return b;
    }

Может кто-нибудь мне помочь?

1
Saleh Refaai 27 Май 2017 в 21:54

2 ответа

Лучший ответ

Вы используете свой ByteArrayInputStream дважды без сброса позиции буфера.

Попробуйте использовать imageStream.reset(); перед использованием decodeStream во второй раз:

        imageStream.reset();
        b = BitmapFactory.decodeStream(imageStream, null, o1);

ByteArrayInputStream reset ():

Сбрасывает буфер в отмеченную позицию.

1
Motheus 27 Май 2017 в 19:52

Вместо этого вы можете просто использовать более простой метод для декодирования вашего закодированного изображения следующим образом:

byte[] temp = Base64.decode(encodedImage, Base64.DEFAULT);
Bitmap decodedByte = BitmapFactory.decodeByteArray(temp, 0, temp.length); 
0
Abhilash Maurya 27 Май 2017 в 19:14