Android中的setPreviewSize()错误?
我的应用程序中有以下代码:Android中的setPreviewSize()错误?,android,camera,Android,Camera,我的应用程序中有以下代码: camera = Camera.open(CameraInfo.CAMERA_FACING_FRONT); Camera.Parameters setting_param = camera.getParameters(); setting_param.setPreviewSize(128,128); camera.setParameters(setting_param); Camera.Parameters read_param = camera.getPar
camera = Camera.open(CameraInfo.CAMERA_FACING_FRONT);
Camera.Parameters setting_param = camera.getParameters();
setting_param.setPreviewSize(128,128);
camera.setParameters(setting_param);
Camera.Parameters read_param = camera.getParameters();
Camera.Size sz = read_param.getPreviewSize();
在运行安卓3.1的galaxy tab 10.1上,代码的工作原理与预期完全一致。但在运行4.1.2的Galaxy S II手机上,预览的宽度和高度,即sz.width和sz.height分别为640和480!这是4.1.2中的一个错误,还是我在3.1中犯了一个错误而在4.1.2中却没有犯的错误的结果?在设置预览大小之前,您应该检查是否支持该预览大小。
您在相机上有一个名为getSupportedPreviewSizes的方法,该方法将返回支持的预览大小列表。Mick,您应该在设置预览大小之前检查相机是否支持预览大小。更改onSurfaceChanged方法,如下所示
public void surfaceChanged(SurfaceHolder holder, int format, int width,
int height) {
Camera.Parameters mParameters = mCamera.getParameters();
Camera.Size bestSize = null;
List<Camera.Size> sizeList = mCamera.getParameters().getSupportedPreviewSizes();
bestSize = sizeList.get(0);
for(int i = 1; i < sizeList.size(); i++){
if((sizeList.get(i).width * sizeList.get(i).height) >
(bestSize.width * bestSize.height)){
bestSize = sizeList.get(i);
}
}
mParameters.setPreviewSize(bestSize.width, bestSize.height);
mCamera.setParameters(mParameters);
mCamera.startPreview();
//any other code ....
}
public void surfaceChanged(SurfaceHolder holder,int格式,int宽度,
整数高度){
Camera.Parameters mParameters=mCamera.getParameters();
Camera.Size bestSize=null;
List sizeList=mCamera.getParameters().getSupportedPreviewSizes();
bestSize=sizeList.get(0);
对于(int i=1;i
(最佳尺寸.宽度*最佳尺寸.高度){
最佳尺寸=尺寸列表。获取(i);
}
}
mParameters.setPreviewSize(bestSize.width、bestSize.height);
mCamera.setParameters(mParameters);
mCamera.startPreview();
//任何其他代码。。。。
}
请注意,此算法没有考虑曲面的纵横比,因此预览图像可能会被拉伸或挤压。我在CWAC相机库中使用不同的算法作为默认算法,如感谢更新亲爱的:)