我想使用相机预览进行图像识别.出于我的目的,我需要尽可能高的预览分辨率(同时,向用户显示预览).
我创建了一个Preview类,扩展了SurfaceView并将PreviewSize设置为1280x720.我添加了一个PreviewCallBack来获取实时图像:
camera = Camera.open(); parameters = camera.getParameters(); parameters.setPreviewSize(1280,720); camera.setParameters( parameters); byte[] b = new byte[camera.getParameters().getPreviewSize().width * camera.getParameters().getPreviewSize().height * ImageFormat.getBitsPerPixel(camera.getParameters().getPreviewFormat()) / 8]; camera.addCallbackBuffer(b); camera.setPreviewCallbackWithBuffer(new CameraPreviewCallback()); try { camera.setPreviewDisplay(this.getHolder()); camera.startPreview() }
我的字节数组b是1382400字节,我的CameraPreviewCallback.onPreviewFrame()函数接收那些1382400字节 - 但只有第一个497664字节包含数据(匹配768x432分辨率(HTC Desire)).
我在不同的设备上进行了测试,显示分辨率为800x480(HTC Desire,LG Optimus 3D,三星Galaxy S2,三星Galaxy Tab,......).我的代码唯一适用的设备是HTC Desire HD.
有谁知道如何作为字节数组获得完整的720p分辨率?"Something"似乎降低了预览分辨率以适应智能手机显示屏.
问候
Joern
您无法使用任何随机分辨率进行相机预览.
某些设备仅支持某些分辨率.你可以通过Camera.Parameters.getSupportedPreviewSizes()
¹ 查询这些.如果您的设备未1280x720
在此列表中返回,则无法使用它.选择一个支持的分辨率,而不是您想要的分辨率.
¹ 在使用任何720p或更高分辨率之前,您应该这样做