2010-12-14 3 views
46

У меня есть изображение из Интернета в 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?

ответ

110
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(); 
+0

Спасибо за очевидное !! Не думал об этом. –

+9

Должно быть: bitmap.compress (Bitmap.CompressFormat.JPEG, 100, stream); В противном случае поток не содержит данных ... – Entreco

+0

@Cristian i сохранил bitmapdata в базе данных в виде BLOB, снова, когда я снова получаю извлечение из BLOB, фон становится черным. Вы можете мне помочь? Я хочу, чтобы фон был прозрачным, как это было до сохранения в базе данных. –

-2
File myFile = new File(selectedImagePath); 

byte [] mybytearray = new byte [filelenghth]; 

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

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

теперь изображение хранится в ByteArray ..

18

Спасибо всем и это решить мою проблему.

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

Я сохранил bitMapData в базе данных, как BLOB, снова, когда я снова получаю мой доступный из BLOB, фон становится черным. Вы можете мне помочь? Я хочу, чтобы фон был прозрачным, как это было до сохранения в базе данных. –

+0

Я думаю, что это другая проблема, которая возникает параллельно этому процессу. Это замечательно, если вы можете предоставить более подробную информацию для воспроизведения и проверки. – Randula

+1

это происходило при сохранении в формате JPEG, но я изменил его на PNG, работая нормально ... –

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

Это кажется незначительным для принятого ответа от двух лет назад ... – Sam

+0

Это лучший ответ, так как он не " t требует кастинга в BitmapDrawable, который, возможно, не может быть экземпляром. –

+0

@mattsnider Спасибо – Kalpesh

0

Если Drawable является BitmapDrawable вы можете попробовать это.

long getSizeInBytes(Drawable drawable) { 
    if (drawable == null) 
     return 0; 

    Bitmap bitmap = ((BitmapDrawable) drawable).getBitmap(); 
    return bitmap.getRowBytes() * bitmap.getHeight(); 
} 

Bitmap.getRowBytes() возвращает число байтов между строками в пикселях растра.

Более передать этот проект: LazyList

+1

Это сообщение автоматически помечено как низкое качество, потому что это только код. Не могли бы вы расширить его, добавив некоторый текст, чтобы объяснить, как он решает проблему? – gung