Android - Как преобразовать изображение из webview.capturePicture() в байт [] и обратно в растровое изображение

Я пытаюсь захватить изображение, которое я получаю от webview.capturePicture(), чтобы сохранить его в sqliteDatabase, для этого мне нужно преобразовать изображение в байт [], чтобы иметь возможность сохранить его как BLOB в моей таблице , а затем получить этот byte[] и преобразовать его обратно в растровое изображение.

Вот что я делаю:

Picture p = webView.capturePicture();  
ByteArrayOutputStream bos = new ByteArrayOutputStream();  
p.writeToStream(bos);

byte[] ba = bos.toByteArray());

Затем я получаю изображение:

byte[] image = cursor.getBlob(imageColumnIndex);
Bitmap bm = BitmapFactory.decodeByteArray(image, 0, image.length);

Я могу получить байт [] просто отлично, но я все время получаю нулевое растровое изображение от bitmapfactory.

Я также заметил, что если я log.d(TAG, ""+bos), я получаю длинную последовательность байтов, как и ожидалось, но если я делаю то же самое с ba сразу после того, как я делаю bos.toByteArray(), я просто получаю короткий массив, что-то вроде этого: [B@2b0a7c60

Я предполагаю, что у меня возникли проблемы с преобразованием OutputStream в byteArray. Может ли это быть связано с тем, что метод capturePiture() возвращает OutputStream вместо ByteArrayOutputStream?

Любая помощь будет оценена по достоинству.


person codeskraps    schedule 23.04.2012    source источник


Ответы (1)


Используйте следующие две функции convert::::

public String convertBitmapToString(Bitmap src) {
    String str =null; 
    if(src!= null){
        ByteArrayOutputStream os=new ByteArrayOutputStream();
    src.compress(android.graphics.Bitmap.CompressFormat.PNG, 100,(OutputStream) os);
    byte[] byteArray = os.toByteArray();
    str = Base64.encodeToString(byteArray,Base64.DEFAULT);   
    }
    return str;         
}

public static Bitmap getBitMapFromString(String src)    {
    Bitmap bitmap = null;
if(src!= null){
   byte[] decodedString = Base64.decode(src.getBytes(), Base64.DEFAULT);
   bitmap = BitmapFactory.decodeByteArray(decodedString,0,decodedString.length);
}
return bitmap;
}

Обновлено::

//Convert Picture to Bitmap
private static Bitmap pictureDrawable2Bitmap(Picture picture){
        PictureDrawable pictureDrawable = new PictureDrawable(picture);
        Bitmap bitmap = Bitmap.createBitmap(pictureDrawable.getIntrinsicWidth(),pictureDrawable.getIntrinsicHeight(), Config.ARGB_8888);
        Canvas canvas = new Canvas(bitmap);
        canvas.drawPicture(pictureDrawable.getPicture());
        return bitmap;
    }
person Shankar Agarwal    schedule 23.04.2012
comment
Я до сих пор не знаю, как преобразовать изображение, возвращаемое веб-просмотром, в растровое изображение. Думаю, я могу получить bytearrayoutstream!? с картинки, но как только я конвертирую в os.tobytearray(), я, кажется, теряю всю информацию. Чтобы использовать ваш метод, мне нужно сначала преобразовать изображение в растровое изображение. - person codeskraps; 23.04.2012
comment
чтобы преобразовать изображение в растровое изображение, вы можете использовать класс picturedrawable в Android - person Shankar Agarwal; 23.04.2012
comment
Спасибо... это то, чего не хватало - person codeskraps; 23.04.2012
comment
я использую ваш код и конвертирую изображение после onPageFinished, но создаю проблему с пустым изображением - person Sanket990; 04.07.2014