Android Bitmap 和 ByteArray的互相转换

Android Bitmap 和 ByteArray的互相转换

移动平台图像处理,须要将图像传给native处理,如何传递?将bitmap转换成一个 byte[] 方便传递也方便cpp代码直接处理图像内容。java

Bitmap -> byte[]

建立一个ByteBuffer用于接收数据。首先须要爲buffer开辟内存空间,内存空间的大小就是图片的大小。将bitmap的数据写入buffer,而后调用buffer的 array() 方法获得array.android

int bytes = bmp.getByteCount(); ByteBuffer buf = ByteBuffer.allocate(bytes); bmp.copyPixelsToBuffer(buf); byte[] byteArray = buf.array();

byte[] -> Bitmap

这个步骤让我花费了更多时间。以前看到有人說能够使用nginx

Bitmap bitmap = BitmapFactory.decodeByteArray(bitmapdata, 0, bitmapdata.length); 

来根据ByteArray直接获得bitmap,可是我使用中出现问题。想一想其实很简单,就这么一行语句,一个bitmap对象必须的参数都没有设置,怎么就可能获得正常的bitmap对象?这个方法生效的前提是,提供的bitmapdata是包含了图像参数的,而非简单的RGBA数据。而我如今获得的仅仅是RGBA数据,因此须要先获得一个bitmap实例,再往里填数据。须要将获得的array再变回buffer,使用buffer的 wrap 方法,包装数组获得buffer.数组

// use Bitmap.Config.ARGB_8888 instead of type is OK Bitmap stitchBmp = Bitmap.createBitmap(width, height, type); stitchBmp.copyPixelsFromBuffer(ByteBuffer.wrap(byteArray)); imageView.setImageBitmap(stitchBmp);

参考资料ui

How do I convert raw camera data into a Bitmap on Androidspa

How to convert byte array to Bitmapcode

相关文章
相关标签/搜索