Android - 如何将webview.capturePicture()捕获的图片转换为byte[],并再次转换为位图

4
我正在尝试捕获从webview.capturePicture()获取的图片,并将其保存到sqliteDatabase中。为此,我需要将图像转换为byte[],以便能够将其保存为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);

我可以很好地检索byte [],但我总是从bitmapfactory得到一个空位图。
我还注意到,如果我log.d(TAG,“”+bos),我将获得预期的长字节序列,但如果我在执行完bos.toByteArray()后对ba执行同样的操作,我只会得到一个短数组,像这样:[B@2b0a7c60
我猜想我可能遇到了将OutputStream转换为byteArray的问题。这可能是因为capturePiture()方法返回的是OutputStream而不是ByteArrayOutputStream吗?
任何帮助都将不胜感激。
1个回答

7
使用下面两个函数进行转换::::
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;
    }

1
我仍然不知道如何将WebView返回的图片转换为位图。我能够从图片中获取bytearrayoutstream,但是一旦我转换为os.tobytearray(),似乎就失去了所有信息。为了能够使用您的方法,我需要先将图片转换为位图。 - codeskraps
1
在Android中,要将图片转换为位图,您可以使用PictureDrawable类。 - Shankar Agarwal
1
谢谢...这就是我缺少的那一部分。 - codeskraps
我正在使用你的代码,并在onPageFinished后转换图像,但出现了创建空白图像的问题。 - Sanket990

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接