我正在使用API 2.1,我的调试显示最大缩放值为15.此处的代码不会使相机变焦。如何让相机变焦?
camera = Camera.open();
Camera.Parameters parameters = camera.getParameters();
parameters.set("orientation", "portrait");
parameters.setWhiteBalance(Camera.Parameters.WHITE_BALANCE_TWILIGHT);
int zoom = parameters.getMaxZoom();
Log.d(TAG, "Zoom " + zoom);
parameters.setZoom(15);
camera.setParameters(parameters);
答案 0 :(得分:9)
此功能取决于您的Android版本。 方法parameters.getMaxZoom()自从出现以来:API Level 8(Android 2.2),因此如果您使用Android 2.1,则此代码将无效。 另一件事。您应该使用像参数这样的最大缩放.setZoom(zoom);而是使用常量参数.setZoom(15);
此外,您需要检查该用户的设备是否支持缩放。您可以这样做(仅适用于Android 2.2及更高版本)
Camera.Parameters parameters = camera.getParameters();
int maxZoom = parameters.getMaxZoom();
if (parameters.isZoomSupported()) {
if (zoom >=0 && zoom < maxZoom) {
parameters.setZoom(zoom);
} else {
// zoom parameter is incorrect
}
}
但据我所知,在Android 2.1中没有设置缩放的标准API我还在调查这个问题。
答案 1 :(得分:3)
关于缩放的样本是有效的,非常感谢。
这是我的代码:
zooming = (ZoomControls) findViewById(R.id.zooming);
zooming.setOnZoomInClickListener(new OnClickListener() {
public void onClick(View v) {
Camera.Parameters p = mCamera.getParameters();
int maxZoom = p.getMaxZoom();
if (p.isZoomSupported()) {
zoom += 10;
if (zoom > maxZoom) {
zoom -= 10;
}
p.setZoom(zoom);
}
mCamera.setParameters(p);
try {
mCamera.setPreviewDisplay(mSurfaceHolder);
} catch (Exception e) { }
mCamera.startPreview();
}
});
我希望您的申请也能正常运作。
答案 2 :(得分:1)
如果您想使用搜索栏更改相机预览放大输出,请使用以下代码完美运行:
seekbarZoom = (SeekBar) findViewById(R.id.seekBarZoom);
seekbarZoom.setOnSeekBarChangeListener(new SeekBar.OnSeekBarChangeListener(){
@Override
public void onProgressChanged(SeekBar seekBar, int progress,
boolean fromUser) {
// TODO Auto-generated method stub
Log.d(TAG, "progress:"+progress);
if(mCamera.getParameters().isZoomSupported()){
Parameters params = mCamera.getParameters();
params.setZoom(progress);
mCamera.setParameters(params);
}
}
@Override
public void onStartTrackingTouch(SeekBar seekBar) {
// TODO Auto-generated method stub
Log.d(TAG, "onStartTrackingTouch");
}
@Override
public void onStopTrackingTouch(SeekBar seekBar) {
// TODO Auto-generated method stub
Log.d(TAG, "onStartTrackingTouch");
}
});
答案 3 :(得分:0)
如果您在预览打开时尝试设置参数,则必须先停止预览,设置参数然后重新开始预览。这是我在4.1之前所面临的问题,也在Android官方网站中提到过
答案 4 :(得分:0)
zoomIncrementer = parameters.getMaxZoom() / 2;
zoomInOut.setOnZoomInClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
zoomIncrementer += parameters.getMaxZoom() / 5;
if (zoomIncrementer > parameters.getMaxZoom()) {
zoomIncrementer = parameters.getMaxZoom();
Log.d(TAG, String.valueOf(zoomIncrementer));
}
cameraParameters();
cameraReloader();
}
});
zoomInOut.setOnZoomOutClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
zoomIncrementer -= parameters.getMaxZoom() / 5;
if(zoomIncrementer < 0){
zoomIncrementer = 0;
}
cameraParameters();
cameraReloader();
}
});
void cameraReloader() {
try {
camera.stopPreview();
} catch (Exception e) {
}
try {
camera.setPreviewDisplay(cameraHolder);
camera.startPreview();
} catch (Exception e) {
}
}
void cameraParameters() {
Display display = ((WindowManager) getSystemService(WINDOW_SERVICE)).getDefaultDisplay();
parameters.setFlashMode(Parameters.FLASH_MODE_TORCH);
parameters.setFocusMode(Parameters.FOCUS_MODE_CONTINUOUS_PICTURE);
parameters.setZoom(zoomIncrementer);
parameters.setFocusMode(Parameters.FOCUS_MODE_MACRO);
parameters.setWhiteBalance(Parameters.WHITE_BALANCE_AUTO);
Log.d(TAG, String.valueOf(parameters.getMaxZoom()));
if (display.getRotation() == Surface.ROTATION_0) {
camera.setDisplayOrientation(90);
}
if (display.getRotation() == Surface.ROTATION_270) {
camera.setDisplayOrientation(180);
}
camera.setParameters(parameters);
}