Допустимый байт []
У меня есть изображение из Интернета в ImageView
. Он очень маленький (значок), и я хотел бы сохранить его в моей базе данных SQLite.
Я могу получить Drawable
из mImageView.getDrawable()
, но тогда я не знаю, что делать дальше. Я не совсем понимаю класс Drawable
в Android.
Я знаю, что могу получить массив байтов из Bitmap
, например:
Bitmap defaultIcon = BitmapFactory.decodeStream(in);
ByteArrayOutputStream stream = new ByteArrayOutputStream();
defaultIcon.compress(Bitmap.CompressFormat.JPEG, 100, stream);
byte[] bitmapdata = stream.toByteArray();
Но как получить массив байтов из Drawable
?
Ответы
Ответ 1
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();
Ответ 2
Спасибо всем, и это решило мою проблему.
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();
Ответ 3
Bitmap bitmap = BitmapFactory.decodeResource(getResources(), R.drawable.tester);
ByteArrayOutputStream stream = new ByteArrayOutputStream();
bitmap.compress(Bitmap.CompressFormat.JPEG, 100, stream);
byte[] bitMapData = stream.toByteArray();
Ответ 4
Если Drawable является BitmapDrawable, вы можете попробовать это.
long getSizeInBytes(Drawable drawable) {
if (drawable == null)
return 0;
Bitmap bitmap = ((BitmapDrawable) drawable).getBitmap();
return bitmap.getRowBytes() * bitmap.getHeight();
}
Bitmap.getRowBytes() возвращает количество байтов между строками в растровых пикселях.
Подробнее см. этот проект: LazyList
Ответ 5
File myFile = new File(selectedImagePath);
byte [] mybytearray = new byte [filelenghth];
BufferedInputStream bis1 = new BufferedInputStream(new FileInputStream(myFile));
bis1.read(mybytearray,0,mybytearray.length);
теперь изображение сохраняется в байтах.