我正在做依赖于相机的Android应用程序。
我有函数public void onPreviewFrame(byte[] data, Camera camera)
,当准备就绪时到达帧。现在我需要将此byte[] data
转换为Bitmap
。我已经阅读了很多解决方案,但我找到了一个运行正常的解决方案,但速度很慢,在LG Optimus G中大约250毫秒:
Camera.Parameters parameters = camera.getParameters();
int width = parameters.getPreviewSize().width;
int height = parameters.getPreviewSize().height;
ByteArrayOutputStream outstr = new ByteArrayOutputStream();
Rect rect = new Rect(0, 0, width, height);
YuvImage yuvimage = new YuvImage(data, ImageFormat.NV21, width,
height, null);
yuvimage.compressToJpeg(rect, 100, outstr);
Bitmap bmp = BitmapFactory.decodeByteArray(outstr.toByteArray(),
0,
outstr.size());
还有其他办法吗?如果我想要高帧率的处理,那么这种方式不是最佳的。
答案 0 :(得分:1)
有两件事可以帮助加快速度:
#1而不是硬编码的ImageFormat.NV21使用来自parameters.getPreviewFormat()的格式
#2降低质量
答案 1 :(得分:0)
只需致电decodeByteArray(byte[] data, int offset, int length)即可。那应该更快。
public void onPreviewFrame(byte[] data, Camera camera) {
Bitmap bmp = BitmapFactory.decodeByteArray(data, 0, data.length);
}