如何实现android手机摄像头的的自动对焦

 我来答
匿名用户
2017-08-20
展开全部
  根据资料上显示有如下几种:
  1 极端人物的做法: 使用一个定时器,设定定时时间,然后不间断的对焦。
  2 极客人物的做法: 那就是利用驱动层实现,但是这个一般人还是算了吧
  3个人认为: 观察系统的原生相机得知,这东东也没用定时器啊,貌似也不可能复杂到全用驱动来实现,即使底层用的是C
实现,但是理论上讲,google肯定会提供这个封装好东东。于是果断的去查阅 DOC 一看,发现果然有这个东东 : 代码如下
  代码如下:

  public class MainActivity extends Activity {

  private SurfaceView surfaceView;

  private SurfaceHolder surfaceHolder;

  private boolean flag = false;

  private String fileUrl="";

  Camera camera;

  Camera.Parameters parameters;

  @Override

  protected void onCreate(Bundle savedInstanceState) {

  super.onCreate(savedInstanceState);

  setContentView(R.layout.activity_main);

  surfaceView = (SurfaceView) findViewById(R.id.surfaceView1);

  Button button=(Button) findViewById(R.id.takepicture);

  surfaceHolder = surfaceView.getHolder();

  surfaceHolder.setType(SurfaceHolder.SURFACE_TYPE_PUSH_BUFFERS);

  surfaceHolder.setKeepScreenOn(true);

  surfaceView.setFocusable(true);

  surfaceView.setBackgroundColor(TRIM_MEMORY_BACKGROUND);

  surfaceHolder.addCallback(new Callback() {

  @Override

  public void surfaceDestroyed(SurfaceHolder holder) {

  // TODO Auto-generated method stub

  camera.stopPreview();

  camera.release();

  camera=null;

  }

  @Override

  public void surfaceCreated(SurfaceHolder holder) {

  // TODO Auto-generated method stub

  if(null==camera){

  camera=Camera.open();

  try {

  camera.setPreviewDisplay(surfaceHolder);

  initCamera();

  camera.startPreview();

  } catch (IOException e) {

  // TODO Auto-generated catch block

  e.printStackTrace();

  }

  }

  }

  @Override

  public void surfaceChanged(SurfaceHolder holder, int format, int width, int
height){

  //实现自动对焦

  camera.autoFocus(new AutoFocusCallback() {

  @Override

  public void onAutoFocus(boolean success, Camera camera) {

  if(success){

  initCamera();//实现相机的参数初始化

  camera.cancelAutoFocus();//只有加上了这一句,才会自动对焦。

  }

  }

  });

  }

  });

  }

  //相机参数的初始化设置

  private void initCamera()

  {

  parameters=camera.getParameters();

  parameters.setPictureFormat(PixelFormat.JPEG);

  //parameters.setPictureSize(surfaceView.getWidth(),
surfaceView.getHeight()); // 部分定制手机,无法正常识别该方法。

  parameters.setFlashMode(Parameters.FLASH_MODE_TORCH);

  parameters.setFocusMode(Camera.Parameters.FOCUS_MODE_CONTINUOUS_PICTURE);//1连续对焦

  setDispaly(parameters,camera);

  camera.setParameters(parameters);

  camera.startPreview();

  camera.cancelAutoFocus();// 2如果要实现连续的自动对焦,这一句必须加上

  }

  //控制图像的正确显示方向

  private void setDispaly(Camera.Parameters parameters,Camera camera)

  {

  if (Integer.parseInt(Build.VERSION.SDK) >= 8){

  setDisplayOrientation(camera,90);

  }

  else{

  parameters.setRotation(90);

  }

  }

  //实现的图像的正确显示

  private void setDisplayOrientation(Camera camera, int i) {

  Method downPolymorphic;

  try{

  downPolymorphic=camera.getClass().getMethod("setDisplayOrientation", new
Class[]{int.class});

  if(downPolymorphic!=null) {

  downPolymorphic.invoke(camera, new Object[]{i});

  }

  }

  catch(Exception e){

  Log.e("Came_e", "图像出错");

  }

  }

  @Override

  public boolean onCreateOptionsMenu(Menu menu) {

  // Inflate the menu; this adds items to the action bar if it is
present.

  getMenuInflater().inflate(R.menu.main, menu);

  return true;

  }

  }
深圳量子动力
2024-10-28 广告
在量子动力(深圳)计算机科技有限公司,我们致力于将前沿技术融入安防与智能识别领域。摄像头人脸捕捉技术,依托深度学习算法与高效图像处理能力,能够在复杂环境中迅速锁定并精准捕捉人脸信息。这一技术不仅提升了监控系统的智能化水平,还在公共安全、门禁... 点击进入详情页
本回答由深圳量子动力提供
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式