2016-07-28 9 views
2

Я получаю JPG изображение через гнездо и отправляется как ByteBuffer , что я делаю это:Как конвертировать ByteBuffer в изображение в 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); 

Но что происходит, что он не может декодировать imageBytes и bitmap имеет значение NULL.

Также у меня есть образы изображений: 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 больше}

В чем проблема? проблема с декодированием? или преобразование из ByteBuffer в массив байтов?

Заранее благодарим за помощь.

+0

'он отправляется в ByteBuffer'. Не думайте так. Он отправляется как поток байтов. – greenapps

+0

'DecodeData.mReceivingBuffer'. Вы не указали, как вы получили данные. Очень неполный код. Покажите шестнадцатеричную нотацию полученных байтов. А также отправленные байты в шестнадцатеричном формате, пожалуйста. – greenapps

ответ

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); 

ИЛИ

// 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);

ИСПОЛЬЗОВАНИЕ ЛЮБЫЕ ВЫШЕ ПЕРЕВЕСТИ ByteBuffer байтового массива и преобразуйте его BITMAP и установить его в своем ImageView.

Надеюсь, это вам поможет.

+0

Просто код без каких-либо дополнительных разъяснений не очень полезен. – Robert

+0

не работает с использованием buf.get (imageBytes); не заполняйте imagebytes данными. Думаю, imageBytes = receivedData.array(); лучше, и теперь он декодирует, но также не может отображать, но спасибо – zelf

+0

@Andolasoft спасибо за вашу помощь. Я думаю, первое решение с изменением buf.get (imageBytes); to buf.array будет работать, поскольку buf.get() ничего не пишет внутри imageBytes в двух решениях. – zelf

2

Это один работал для меня (для ARGB_8888 пиксельного буфера):

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; 
} 
Смежные вопросы