2010-12-14 61 views
46

我從網上有一個圖像在ImageView。它非常小(favicon),我想將它存儲在我的SQLite數據庫。 我可以從mImageView.getDrawable()得到Drawable,但我不知道接下來要做什麼。我不完全瞭解Android中的Drawable類。可以繪製爲字節[]

我知道我可以從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

謝謝大家了!明顯沒想過要投它。 – 2010-12-15 00:01:41

+9

應該是:bitmap.compress(Bitmap.CompressFormat.JPEG,100,stream);否則流不包含數據... – Entreco 2011-09-07 09:54:30

+0

@Cristian我將數據庫中的bitmapdata保存爲BLOB,當我從BLOB中恢復我的drawable時,背景變成黑色。你能幫我嗎?我希望背景透明,因爲它保存到數據庫之前。 – 2014-09-12 10:29:53

-2
File myFile = new File(selectedImagePath); 

byte [] mybytearray = new byte [filelenghth]; 

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

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

現在的圖像存儲在字節組..

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中恢復我的drawable時,背景變成黑色。你能幫我嗎?我希望背景透明,因爲它保存到數據庫之前。 – 2014-09-12 10:30:14

+0

我認爲它是與該過程並行發生的另一個問題。它很棒,如果你能提供更多的細節來重現和檢查。 – Randula 2014-09-20 18:42:04

+1

這是發生在JPEG格式保存時,但我改爲PNG其工作正常... – 2014-09-21 04:47:06

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 2012-07-16 21:39:06

+0

這是一個更好的答案,因爲它doesn' t需要轉換爲BitmapDrawable,其中drawable可能實際上不是實例。 – 2016-04-29 21:11:43

+0

@mattsnider謝謝 – Kalpesh 2016-05-09 09:54:04

0

如果繪製對象是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 2014-06-13 15:04:42

相關問題