我正在尝试将图像对象转换为位图,但它返回null。
image = reader.acquireLatestImage();
ByteBuffer buffer = image.getPlanes()[0].getBuffer();
byte[] bytes = new byte[buffer.capacity()];
Bitmap myBitmap = BitmapFactory.decodeByteArray(bytes,0,bytes.length,null);
图像本身是jpeg图像,我可以将它保存到磁盘上,我想转换为位图的原因是因为我想在将其保存到磁盘之前进行最终旋转。 在BitmapFactory类中挖掘我看到这一行。
bm = nativeDecodeByteArray(data, offset, length, opts);
此行返回null。 使用调试器进一步挖掘
private static native Bitmap nativeDecodeByteArray(byte[] data, int offset,
int length, Options opts);
这假设返回Bitmap对象但它返回null。
任何技巧或想法?
由于
答案 0 :(得分:4)
您没有复制字节。您已检查容量但未复制字节。
ByteBuffer buffer = image.getPlanes()[0].getBuffer();
byte[] bytes = new byte[buffer.remaining()];
buffer.get(bytes);
Bitmap myBitmap = BitmapFactory.decodeByteArray(bytes,0,bytes.length,null);
答案 1 :(得分:0)
我认为您正在尝试解码一个空数组,您只是创建它但从不将图像数据复制到它。
您可以尝试:
ByteBuffer buffer = image.getPlanes()[0].getBuffer();
byte[] bytes = buffer.array();
Bitmap myBitmap = BitmapFactory.decodeByteArray(bytes,0,bytes.length,null);
如你所说它不起作用,那么我们需要手动复制缓冲区...试试这个:)
byte[] bytes = new byte[buffer.remaining()];
buffer.get(bytes);
Bitmap myBitmap = BitmapFactory.decodeByteArray(bytes,0,bytes.length,null);