web-dev-qa-db-fra.com

Dessins en octets []

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?

53
David Shellabarger
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();
127
Cristian

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();
18
Randula
Bitmap bitmap = BitmapFactory.decodeResource(getResources(), R.drawable.tester);
ByteArrayOutputStream stream = new ByteArrayOutputStream();
bitmap.compress(Bitmap.CompressFormat.JPEG, 100, stream);
byte[] bitMapData = stream.toByteArray();
5
Kalpesh

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

0
Favas Kv