【发布时间】:2012-10-08 18:17:29
【问题描述】:
我正在尝试从相机预览中获取位图图像,我将在执行人脸检测后对其进行一些处理并绘制一些叠加层。
看了一圈,发现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 */
}
问题是,“预览”对象不为空,但它显然不是有效的位图。在调试器上,我可以看到 mWidth 和 mHeight 都设置为 -1,这对我来说似乎是错误的。我做错了什么?
【问题讨论】:
-
如果您正在绘制叠加层并执行面部检测等繁重的工作,您将需要加快 NDK 的速度。看看 GLSurfaceView 以及它如何与回调一起使用。您不需要 jpeg - 对本机字节数组进行操作
-
@AndrewG,当使用
GLSurfaceView时,如何将图像帧作为Bitmap。
标签: android android-camera bitmapfactory