当前位置: 移动技术网 > IT编程>移动开发>Android > Android实现手机摄像头的自动对焦

Android实现手机摄像头的自动对焦

2019年07月24日  | 移动技术网IT编程  | 我要评论

龙州论坛,上海二本大学,穿衣打扮技巧

如何实现android相机的自动对焦,而且是连续自动对焦的。当然直接调用系统相机就不用说了,那个很简单的。下面我们主要来看看如如何自己实现一个相机,并且实现自动连续对焦。

代码如下:

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;
  }
  
 
 
}

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持移动技术网。

如对本文有疑问,请在下面进行留言讨论,广大热心网友会与你互动!! 点击进行留言回复

相关文章:

验证码:
移动技术网