J'ai une image du Web dans une ImageView
. Il est très petit (un favicon) et j'aimerais le stocker dans ma base de données SQLite . Je peux obtenir un Drawable
à partir de mImageView.getDrawable()
mais je ne sais pas quoi faire ensuite. Je ne comprends pas bien la classe Drawable
dans Android.
Je sais que je peux obtenir un tableau d'octets à partir d'une Bitmap
comme:
Bitmap defaultIcon = BitmapFactory.decodeStream(in);
ByteArrayOutputStream stream = new ByteArrayOutputStream();
defaultIcon.compress(Bitmap.CompressFormat.JPEG, 100, stream);
byte[] bitmapdata = stream.toByteArray();
Mais comment puis-je obtenir un tableau d'octets d'une Drawable
?
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();
Merci à tous et cela a résolu mon problème.
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();
Bitmap bitmap = BitmapFactory.decodeResource(getResources(), R.drawable.tester);
ByteArrayOutputStream stream = new ByteArrayOutputStream();
bitmap.compress(Bitmap.CompressFormat.JPEG, 100, stream);
byte[] bitMapData = stream.toByteArray();
Si Drawable est un BitmapDrawable, vous pouvez essayer celui-ci.
long getSizeInBytes(Drawable drawable) {
if (drawable == null)
return 0;
Bitmap bitmap = ((BitmapDrawable) drawable).getBitmap();
return bitmap.getRowBytes() * bitmap.getHeight();
}
Bitmap.getRowBytes () renvoie le nombre d'octets entre les lignes dans les pixels du bitmap.
Pour plus de référe ce projet: LazyList