可绘制到byte []

时间:2010-12-14 04:14:59

标签: android database drawable android-bitmap

我在ImageView的网络上有一张图片。它非常小(一个favicon),我想将它存储在我的SQLite数据库中。 我可以从Drawable获得mImageView.getDrawable(),但后来我不知道该怎么做。我不完全理解Android中的Drawable类。

我知道我可以从Bitmap得到一个字节数组,如:

Bitmap defaultIcon = BitmapFactory.decodeStream(in);

ByteArrayOutputStream stream = new ByteArrayOutputStream();
defaultIcon.compress(Bitmap.CompressFormat.JPEG, 100, stream);

byte[] bitmapdata = stream.toByteArray();

但是如何从Drawable获取字节数组?

5 个答案:

答案 0 :(得分:128)

Drawable d; // the drawable (Captain Obvious, to the rescue!!!)
Bitmap bitmap = ((BitmapDrawable)d).getBitmap();
ByteArrayOutputStream stream = new ByteArrayOutputStream();
bitmap.compress(Bitmap.CompressFormat.JPEG, 100, stream);
byte[] bitmapdata = stream.toByteArray();

答案 1 :(得分:18)

谢谢大家,这解决了我的问题。

Resources res = getResources();
Drawable drawable = res.getDrawable(R.drawable.my_pic);
Bitmap bitmap = ((BitmapDrawable)drawable).getBitmap();
ByteArrayOutputStream stream = new ByteArrayOutputStream();
bitmap.compress(Bitmap.CompressFormat.JPEG, 100, stream);
byte[] bitMapData = stream.toByteArray();

答案 2 :(得分:5)

Bitmap bitmap = BitmapFactory.decodeResource(getResources(), R.drawable.tester);
ByteArrayOutputStream stream = new ByteArrayOutputStream();
bitmap.compress(Bitmap.CompressFormat.JPEG, 100, stream);
byte[] bitMapData = stream.toByteArray();

答案 3 :(得分:0)

如果Drawable是BitmapDrawable,你可以试试这个。

long getSizeInBytes(Drawable drawable) {
    if (drawable == null)
        return 0;

    Bitmap bitmap = ((BitmapDrawable) drawable).getBitmap();
    return bitmap.getRowBytes() * bitmap.getHeight();
}

Bitmap.getRowBytes()返回位图像素中行之间的字节数。

有关更多信息,请参阅此项目:LazyList

答案 4 :(得分:-2)

File myFile = new File(selectedImagePath);

byte [] mybytearray  = new byte [filelenghth];

BufferedInputStream bis1 = new BufferedInputStream(new FileInputStream(myFile));

bis1.read(mybytearray,0,mybytearray.length);

现在图像存储在bytearray中..