我刚刚设置了一个非常基本的相机预览,显示全屏相机画面。我比较了我的应用和安卓相机的流畅度,发现安卓相机似乎更加流畅。
为什么会这样?有没有特殊的技巧来提高相机预览的性能?
我刚刚设置了一个非常基本的相机预览,显示全屏相机画面。我比较了我的应用和安卓相机的流畅度,发现安卓相机似乎更加流畅。
为什么会这样?有没有特殊的技巧来提高相机预览的性能?
我曾经也遇到过同样的问题,后来发现问题与相机分辨率有关。很可能你的Camera
正在用最大可用分辨率初始化,这可能会导致预览时性能变慢。尝试使用类似以下的方法设置较低的picture size
。
Camera.Parameters params = camera.getParameters();
params.setPictureSize(1280, 960);
camera.setParameters(params);
请注意,您需要设置可用的图片尺寸。您可以使用以下命令检查可用的尺寸:
camera.getParameters().getSupportedPictureSizes();
希望能对您有所帮助。
编辑
看起来如果使用具有不同宽高比的图片大小,会使性能变慢。这是我选择pictureSize
的方法。-
首先,我获取相机默认pictureSize
的宽高比。
Camera.Parameters params = camera.getParameters();
defaultCameraRatio = (float) params.getPictureSize().width / (float) params.getPictureSize().height;
然后我获得了一个更小的 pictureSize
,它适合相同的比例。
private Size getPreferredPictureSize() {
Size res = null;
List<Size> sizes = camera.getParameters().getSupportedPictureSizes();
for (Size s : sizes) {
float ratio = (float) s.width / (float) s.height;
if (ratio == defaultCameraRatio && s.height <= PHOTO_HEIGHT_THRESHOLD) {
res = s;
break;
}
}
return res;
}
在这里,PHOTO_HEIGHT_THRESHOLD
是您想要允许的最大高度。
以下是使用针对Nexus 5的硬编码值(为简单起见)设置FPS的相机API调用。
public void setFps(Camera camera) {
Camera.Parameters params = camera.getParameters();
params.setPreviewFpsRange(7000, 30000);
camera.setParameters(params);
}