【问题标题】:Android - How to convert picture from webview.capturePicture() to byte[] and back to bitmapAndroid - 如何将图片从 webview.capturePicture() 转换为 byte[] 并返回位图
【发布时间】:2012-05-03 15:46:42
【问题描述】:

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

这是我正在做的事情:

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 吗?

任何帮助将不胜感激。

【问题讨论】:

    标签: android webview bytearray image bytearrayoutputstream


    【解决方案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;
        }
    

    【讨论】:

    • 我仍然不知道如何将webview返回的图片转换为位图。我能够得到我认为的 bytearrayoutstream !?从图片中,但一旦我转换为 os.tobytearray() 我似乎丢失了所有信息。为了能够使用您的方法,我需要先将图片转换为位图
    • 将图片转换为位图可以使用android中的picturedrawable类
    • 谢谢...这是缺少的一点
    • 我正在使用您的代码并在 onPageFinished 之后转换图像但创建空白图像问题
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-06-16
    • 1970-01-01
    • 1970-01-01
    • 2016-04-06
    • 2011-05-27
    • 2011-06-08
    相关资源
    最近更新 更多