在我的应用中,我需要将相机预览尺寸设置为640x480。 我在不同的设备和不同的Android版本上尝试了我的代码(例如关于三星galaxy S2的2.3.6,关于asus tf101g的4.0.3,关于galaxy nexus的4.3),以及最后一个关于Android kitkat的新Nexus 5(4.4)
我的代码在所有设备上都能正常运行,但在Nexus 5上无效。为什么? 实际上在这个步骤之后:
int PREVIEW_WIDTH = 640;
int PREVIEW_HEIGHT = 480;
if(isSupportedSize(PREVIEW_WIDTH,PREVIEW_HEIGHT,mCamera)){
//isSupportedSize controls that width and height are supported by mCamera
mCamera.getParameters().setPreviewSize(PREVIEW_WIDTH,PREVIEW_HEIGHT);
Log.d("debug myapp", "Preview sizes: " + mCamera.getParameters().getPreviewSize().width
+ ", "
+ mCamera.getParameters().getPreviewSize().height);
}
或此步骤:
int PREVIEW_WIDTH = 640;
int PREVIEW_HEIGHT = 480;
Camera.Parameters param= mCamera.getParameters();
if(isSupportedSize(PREVIEW_WIDTH,PREVIEW_HEIGHT,param)){
//isSupportedSize controls that width and height are supported by mCamera
param.setPreviewSize(PREVIEW_WIDTH,PREVIEW_HEIGHT);
mCamera.setParameters(param);
Log.d("debug myapp", "Preview sizes: " + mCamera.getParameters().getPreviewSize().width
+ ", "
+ mCamera.getParameters().getPreviewSize().height);
}
仅在Nexus5上,日志为1920,1080。 为什么?有人有同样的问题吗?
isSupportedSize():
private boolean isSupportedSize(int width, int height, Camera cam){
Camera.Parameters param = cam.getParameters();
List<Size> suppSizes = param.getSupportedPreviewSizes();
for (Size s: suppSizes){
if (s.width == width && s.height == height){
Log.d("debug", "sizes supported!");
return true;
}
}
return false;
}
效果很好。
答案 0 :(得分:1)
@Override
public void surfaceChanged(SurfaceHolder holder, int format, int width, int height) {
if (holder.getSurface() == null) {
return;
}
try {
mCamera.stopPreview();
} catch (Exception e) {
// TODO: handle exception
}
try {
mCamera.setPreviewDisplay(holder);
Camera.Parameters parameters=mCamera.getParameters();
parameters.setPreviewSize(mPreviewSize.width, mPreviewSize.height);
mCamera.setParameters(parameters);
mCamera.startPreview();
} catch (Exception e) {
e.printStackTrace();
}
}
答案 1 :(得分:0)
请参阅this post的回答。有些平板电脑似乎允许在预览模式下更改预览尺寸,而其他平板电脑则不允许。