从byte []创建位图

时间:2015-04-14 08:40:25

标签: java android bitmap

我正在做依赖于相机的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());

还有其他办法吗?如果我想要高帧率的处理,那么这种方式不是最佳的。

2 个答案:

答案 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);
}