zel*_*elf 3 android bytebuffer image bytearray bitmap
我通过套接字接收jpg图像,它作为ByteBuffer发送,我正在做的是:
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);
Run Code Online (Sandbox Code Playgroud)
但是发生的事情是无法解码imageBytes并且位图为null。
我也得到了imagebytes作为: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转换为Byte数组?
在此先感谢您的帮助。
这对我有用(对于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;
}
Run Code Online (Sandbox Code Playgroud)
ByteBuffer buf = DecodeData.mReceivingBuffer;
byte[] imageBytes= new byte[buf.remaining()];
buf.get(imageBytes);
final Bitmap bmp=BitmapFactory.decodeByteArray(imageBytes,0,imageBytes.length);
showImage(bmp);
Run Code Online (Sandbox Code Playgroud)
或者
// 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);
Run Code Online (Sandbox Code Playgroud)
最终位图 bmp=BitmapFactory.decodeByteArray(bytes,0,bytes.length); 显示图像(bmp);
使用上面的任何一个将字节缓冲区转换为字节数组并将其转换为位图并将其设置为您的图像视图。
希望这会帮助你。