4

webview.capturePicture() から取得した画像をキャプチャして sqliteDatabase に保存しようとしています。そのためには、画像をバイト [] に変換してテーブルに 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() メソッドが ByteArrayOutputStream ではなく OutputStream を返すためでしょうか?

どんな助けでも大歓迎です。

4

1 に答える 1

7

以下の 2 つの関数 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;
    }
于 2012-04-23T02:14:00.483 に答える