我在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
获取字节数组?
答案 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中..