2016-07-28 23 views
2

Ich erhalte jpg Bild durch Buchse umwandeln und es wird als ByteBuffer gesendet , was ich tue, ist:Wie ByteBuffer in Bild in Android

 ByteBuffer receivedData ; 
     // Image bytes 
     byte[] imageBytes = new byte[0]; 
     // fill in received data buffer with data 
     receivedData= DecodeData.mReceivingBuffer; 
     // Convert ByteByffer into bytes 
     imageBytes = receivedData.array(); 
     ////////////// 
     // Show image 
     ////////////// 
     final Bitmap bitmap = BitmapFactory.decodeByteArray(imageBytes,0,imageBytes.length); 
     showImage(bitmap1); 

Aber was geschieht, dass es den imageBytes zu dekodieren ausfällt und Bitmap ist null.

Auch ich habe imagebytes als: imageBytes: {-1, -40, -1, -32, 0, 16, 74, 70, 73, 70, 0, 1, 1, 1, 0, 96, 0, 0, 0, 0, -1, -37, 0, 40, 28, 30, 35, +10.478 mehr}

Was wäre das Problem? ist es Decodierungsproblem? oder Konvertierung von ByteBuffer zu Byte-Array?

Vielen Dank im Voraus für Hilfe.

+0

'es als ByteBuffer' gesendet wird. Denke nicht. Es wird als Bytestrom gesendet. – greenapps

+0

'DecodeData.mReceivingBuffer'. Sie haben nicht angezeigt, wie Sie die Daten erhalten haben. Sehr unvollständiger Code. Bitte zeigen Sie eine hexadezimale Schreibweise der empfangenen Bytes an. Und auch die gesendeten Bytes bitte hexadezimal. – greenapps

Antwort

2
ByteBuffer buf = DecodeData.mReceivingBuffer; 
byte[] imageBytes= new byte[buf.remaining()]; 
buf.get(imageBytes); 
final Bitmap bmp=BitmapFactory.decodeByteArray(imageBytes,0,imageBytes.length); 
    showImage(bmp); 

ODER

// Create a byte array 
 
byte[] bytes = new byte[10]; 
 

 
// Wrap a byte array into a buffer 
 
ByteBuffer buf = ByteBuffer.wrap(bytes); 
 

 
// Retrieve bytes between the position and limit 
 
// (see Putting Bytes into a ByteBuffer) 
 
bytes = new byte[buf.remaining()]; 
 

 
// transfer bytes from this buffer into the given destination array 
 
buf.get(bytes, 0, bytes.length); 
 

 
// Retrieve all bytes in the buffer 
 
buf.clear(); 
 
bytes = new byte[buf.capacity()]; 
 

 
// transfer bytes from this buffer into the given destination array 
 
buf.get(bytes, 0, bytes.length); 
 

 
final Bitmap bmp=BitmapFactory.decodeByteArray(bytes,0,bytes.length); 
 
showImage(bmp);

USE ANY über ByteBuffer VERWANDELT ARRAY TO BYTE und auf BITMAP CONVERT und in Ihre IMAGEVIEW SET.

Hoffe, das wird Ihnen helfen.

+0

Nur Code ohne weitere Erklärung ist nicht sehr hilfreich. – Robert

+0

es funktioniert nicht mit buf.get (imageBytes); imagebytes nicht mit Daten füllen imageBytes = receivedData.array(); ist besser und jetzt ist es Decodierung kann aber auch nicht angezeigt werden, aber danke – zelf

+0

@Anandasoft danke für Ihre Hilfe Ich denke, erste Lösung mit dem Ändern von buf.get (imageBytes); zu buf.array wird funktionieren, als buf.get() schreibt nichts in imageBytes in den beiden Lösungen. – zelf

2

Dies ist für mich gearbeitet (für ARGB_8888 Pixelpuffer):

private Bitmap getBitmap(Buffer buffer, int width, int height) { 
    buffer.rewind(); 
    Bitmap bitmap = Bitmap.createBitmap(width, height, Bitmap.Config.ARGB_8888); 
    bitmap.copyPixelsFromBuffer(buffer); 
    return bitmap; 
}