Android - 如何将图片从webview.capturePicture()转换为byte []并返回到位图

cod*_*aps 4 android image bytearray webview bytearrayoutputstream

我正在尝试捕获我从webview.capturePicture()获取的图片以将其保存到sqliteDatabase,我需要将图像转换为byte []以便能够将其保存为我的表格中的BLOB ,然后能够检索该字节[]并将其转换回位图.

这是我正在做的事情:

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

byte[] ba = bos.toByteArray());
Run Code Online (Sandbox Code Playgroud)

然后我通过以下方式检索图像:

byte[] image = cursor.getBlob(imageColumnIndex);
Bitmap bm = BitmapFactory.decodeByteArray(image, 0, image.length);
Run Code Online (Sandbox Code Playgroud)

我能够很好地检索byte [],但是我从bitmapfactory一直得到一个空位图.

我还注意到,如果我log.d(TAG,""+ bos)我得到了一个很长的字节序列,但是如果我在做bos.toByteArray()之后我做了同样的事情,我只得到一个短数组,这样的事情:[B @ 2b0a7c60

我猜我也很难通过OutputStream转换为byteArray.可以这样,因为capturePiture()方法返回一个OutputStream而不是ByteArrayOutputStream吗?

任何帮助,将不胜感激.

Sha*_*wal 7

使用以下两个函数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;
}
Run Code Online (Sandbox Code Playgroud)

更新::

//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;
    }
Run Code Online (Sandbox Code Playgroud)