2010-12-14 17 views
46

Ich habe ein Bild aus dem Internet in einer ImageView. Es ist sehr klein (ein Favicon) und ich möchte es in meiner SQLite-Datenbank speichern. Ich kann eine Drawable von mImageView.getDrawable() bekommen, aber dann weiß ich nicht, was ich als nächstes tun soll. Ich verstehe die Klasse Drawable in Android nicht vollständig.Ziehbar auf Byte []

Ich weiß, dass ich ein Byte-Array von einem Bitmap wie bekommen:

Bitmap defaultIcon = BitmapFactory.decodeStream(in); 

ByteArrayOutputStream stream = new ByteArrayOutputStream(); 
defaultIcon.compress(Bitmap.CompressFormat.JPEG, 100, stream); 

byte[] bitmapdata = stream.toByteArray(); 

Aber wie bekomme ich ein Byte-Array von einem Drawable?

Antwort

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

Vielen Dank für die offensichtlich !! Ich habe nicht darüber nachgedacht, es zu werfen. –

+9

Es sollte sein: bitmap.compress (Bitmap.CompressFormat.JPEG, 100, stream); Sonst enthält der Stream keine Daten ... – Entreco

+0

@Cristian Ich habe Bitmapdaten in der Datenbank als BLOB gespeichert, wieder wenn ich meinen Drawable von BLOB wiedergewinne, wird der Hintergrund schwarz. Kannst du mir helfen? Ich möchte Hintergrund transparent wie es vor dem Speichern in der Datenbank war. –

-2
File myFile = new File(selectedImagePath); 

byte [] mybytearray = new byte [filelenghth]; 

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

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

jetzt das Bild im bytearray gespeichert ..

18

bedankt sich bei allen und dies ist mein Problem gelöst.

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

Ich speicherte BitMapData in der Datenbank als BLOB, wieder wenn ich meine Drawable von BLOB wiedergewinnen, Hintergrund wird schwarz. Kannst du mir helfen? Ich möchte Hintergrund transparent wie es vor dem Speichern in der Datenbank war. –

+0

Ich denke, es ist ein anderes Problem, das parallel zu diesem Prozess auftritt. Es ist großartig, wenn Sie mehr Details zum Reproduzieren und Überprüfen bereitstellen können. – Randula

+1

es geschah beim Speichern im JPEG-Format, aber ich änderte es in PNG es funktioniert gut ... –

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

Dies scheint zu der akzeptierten Antwort vor zwei Jahren eine Nebenrolle zu sein ... – Sam

+0

Dies ist eine bessere Antwort, da es nicht ' t muss in BitmapDrawable umgewandelt werden, wobei das Zeichen möglicherweise keine Instanz von ist. –

+0

@mattsnider Thanks – Kalpesh

0

Wenn Drawable ein BitmapDrawable ist, können Sie versuchen diese.

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

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

Bitmap.getRowBytes() die Anzahl der Bytes zwischen den Reihen in den Pixeln der Bitmap zurückgibt.

Für dieses Projekt mehr beziehen: LazyList

+1

Dieser Beitrag wird automatisch als minderwertig gekennzeichnet, da es sich nur um Code handelt. Würde es Ihnen etwas ausmachen, es zu erweitern, indem Sie etwas Text hinzufügen, um zu erklären, wie es das Problem löst? – gung