我正在尝试从相机预览中获取位图图像,然后进行一些处理和绘制一些覆盖层,完成人脸检测。
经过调查,我发现onPreviewFrame接收的字节数组不能直接解码为位图,需要使用YuvImage将其转换为正确的像素格式,这正是我所做的事情:
@Override
public void onPreviewFrame(byte[] data, Camera camera)
{
YuvImage temp = new YuvImage(data, camera.getParameters().getPreviewFormat(), camera.getParameters().getPictureSize().width, camera.getParameters().getPictureSize().height, null);
ByteArrayOutputStream os = new ByteArrayOutputStream();
temp.compressToJpeg(new Rect(0, 0, temp.getWidth(), temp.getHeight()), 80, os);
Bitmap preview = BitmapFactory.decodeByteArray(os.toByteArray(), 0, os.toByteArray().length);
/* DO SOMETHING WITH THE preview */
}
问题在于,“预览”对象不是null,但显然不是一个有效的位图。在调试器中,我可以看到mWidth和mHeight都设置为-1,这似乎是错误的。我做错了什么?