Android Camera中的对焦区域会忽略指定的区域

时间:2018-11-24 08:25:27

标签: android android-camera

这是我已经实现的代码,我要聚焦在矩形中定义的特定位置。该矩形来自另一个名为SelectedView的类,该类绘制了所需形状的矩形。我遇到的问题是,我为项目实现的焦点完全忽略了该点,而是执行常规的总体焦点,而不是我从selectedView指定的矩形区域。

Camera.Parameters parameters = mOriginalCamera.getParameters();

List<String> focusModes = parameters.getSupportedFocusModes();

if(focusModes.contains(Camera.Parameters.FOCUS_MODE_CONTINUOUS_VIDEO ))
                   {
                       parameters.setFocusMode(Camera.Parameters.FOCUS_MODE_CONTINUOUS_VIDEO );
                   }

if(focusModes.contains(Camera.Parameters.FOCUS_MODE_CONTINUOUS_PICTURE)){

                       parameters.setFocusMode(Camera.Parameters.FOCUS_MODE_CONTINUOUS_PICTURE);
                   }
                   else if(focusModes.contains(Camera.Parameters.FOCUS_MODE_AUTO)){
                       parameters.setFocusMode(Camera.Parameters.FOCUS_MODE_AUTO);
                   }



                   if(parameters.isZoomSupported())
                   {
                       int maxZoom = parameters.getMaxZoom();
                       Log.e(" Max zoom ", String.valueOf(maxZoom));
                       if(maxZoom > 5)
                       {
                           parameters.setZoom(5);
                       }
                   }

                   if (getResources().getConfiguration().orientation == Configuration.ORIENTATION_PORTRAIT)
                   {
                       {
                           parameters.set("orientation", "portrait");
                           parameters.set("rotation",90);
                       }
                   }



                   int maxFocusArea= parameters.getMaxNumFocusAreas();
                   if(maxFocusArea!=0)
                   {
                       Rect focusArea = new Rect();
                       focusArea = SelectedView.focusRect;

                       List<Camera.Area> focusList = new ArrayList<Camera.Area>();
                       Camera.Area cameraArea = new Camera.Area(focusArea, 1000);
                       focusList.add(cameraArea);

                       parameters.setFocusAreas(focusList);
                       parameters.setMeteringAreas(focusList);
                   }

                   mOriginalCamera.setDisplayOrientation(90);
                   mOriginalCamera.setParameters(parameters);

                   mOriginalCamera.autoFocus(new Camera.AutoFocusCallback() {
                       @Override
                       public void onAutoFocus(boolean success, Camera camera) {

                       }
                   });

selectedView类具有静态rect,我从onDraw方法获取该值:

 protected void onDraw(Canvas canvas) {

        int height = RechargeActivity.oldSurfaceView.getHeight();

        canvas.drawRect(40,height/2-40,(int)getScreenWidth()-40,height/2,paint);
        focusRect = new Rect(40,40,(int)getScreenWidth()-40,100);
    }

0 个答案:

没有答案