57 votes

Dessins en octets []

J'ai une image du Web dans un ImageView. Il est très petit (favicon) et j'aimerais le stocker dans ma base de données SQLite. Je peux obtenir un dessin de mImageView.getDrawable () mais je ne sais pas quoi faire ensuite. Je ne comprends pas bien la classe Drawable sous Android.

Je sais que je peux obtenir un tableau d'octets à partir d'un bitmap tel que:

 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'un Drawable?

134voto

Cristian Points 92147
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();

19voto

Randula Points 191

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();
 

6voto

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

0voto

Favas Kv Points 46

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érence, référez-vous à ce projet: LazyList

-2voto

Abhishek Susarla Points 427
 File myFile = new File(selectedImagePath);

byte [] mybytearray  = new byte [filelenghth];

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

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

maintenant l'image est stockée dans le bytearray ..

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X