相机变焦不起作用

时间:2011-10-30 16:45:02

标签: android android-camera

我正在使用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);

5 个答案:

答案 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);

}