Search code examples
androidimagebitmaparraysbytebuffer

How to convert ByteBuffer into image in Android


I am receiving jpg image through socket and it is sent as ByteBuffer what I am doing is:

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

But what is happening that it fails to decode the imageBytes and bitmap is null.

Also I got imagebytes as: 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 more}

What would be the problem? is it decoding problem? or conversion from ByteBuffer to Byte array?

Thanks in advance for help.


Solution

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

    OR

    // 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 ONE ABOVE TO CONVERT BYTEBUFFER TO BYTE ARRAY AND CONVERT IT TO BITMAP AND SET IT INTO YOUR IMAGEVIEW.

    Hope this will help you.