Dibujable a byte

Tengo una imagen de la web en un ImageView . Es muy pequeño (un favicon) y me gustaría almacenarlo en mi base de datos SQLite. Puedo obtener un Drawable de mImageView.getDrawable() pero luego no sé qué hacer. No entiendo completamente la clase Drawable en Android.

Sé que puedo obtener una matriz de bytes de un Bitmap como:

 Bitmap defaultIcon = BitmapFactory.decodeStream(in); ByteArrayOutputStream stream = new ByteArrayOutputStream(); defaultIcon.compress(Bitmap.CompressFormat.JPEG, 100, stream); byte[] bitmapdata = stream.toByteArray(); 

Pero, ¿cómo obtengo una matriz de bytes de un 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(); 

Gracias a todos y esto resolvió mi problema.

 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 es un BitmapDrawable, puedes probar este.

 long getSizeInBytes(Drawable drawable) { if (drawable == null) return 0; Bitmap bitmap = ((BitmapDrawable) drawable).getBitmap(); return bitmap.getRowBytes() * bitmap.getHeight(); } 

Bitmap.getRowBytes () devuelve el número de bytes entre filas en los píxeles del bitmap.

Para más refiera este proyecto: LazyList

 File myFile = new File(selectedImagePath); byte [] mybytearray = new byte [filelenghth]; BufferedInputStream bis1 = new BufferedInputStream(new FileInputStream(myFile)); bis1.read(mybytearray,0,mybytearray.length); 

ahora la imagen se almacena en el bytearray ..