Android摄像头实现毫秒级拍照实例

  

& # 65279;我们知道自定义相机需要以下几步

  
      <李>打开相机,即实例化相机对象,相机镜头=Camera.open();李   <李>设置相机的相关参数,相机。李参数参数=camera.getParameters ();   <李>打开预览,camera.setPreviewDisplay (surfaceholder);李camera.startPreview ();   <李>获取图片,这里只是从预览中获取因此使用,相机。setPreviewCallback(新Camera.PreviewCallback(){………});李   <李>停止预览,释放相机,camera.stopPreview (); camera.release();李   
  

<强> 1,打开相机

        公共静态摄像头openFacingBackCamera () {   相机凸轮=零;   相机。CameraInfo CameraInfo=new Camera.CameraInfo ();   for (int camIdx=0, cameraCount=Camera.getNumberOfCameras ();camIdx & lt;cameraCount;camIdx + +) {   相机。getCameraInfo (camIdx cameraInfo);   如果(cameraInfo。面对==Camera.CameraInfo.CAMERA_FACING_FRONT) {   尝试{//打开相应的摄像头,目前是前置摄像头   凸轮=Camera.open (camIdx);   }捕捉(RuntimeException e) {   e.printStackTrace ();   如果(凸轮!=null) {   cam.stopPreview ();   cam.release ();   }   凸轮=零;   }   }   }   返回凸轮;   }   之前      

<强> 2,设置相关参数和预览

     //定义SurfaceView   私人SurfaceView localSurface;//为surfaceHolder添加一个回调监听器   localSurface.getHolder ()。addCallback(新SurfaceHolder.Callback () {   @Override   公共空间surfaceCreated (SurfaceHolder持有人){      }      @Override   公共空surfaceChanged (SurfaceHolder持有人,int格式,int宽度,int高度){   相机=CameraUtil.openFacingBackCamera ();//设置相机预览旋转角度   camera.setDisplayOrientation (180);   如果(相机!=null) {   相机。参数参数=camera.getParameters();//获得相机参数   List大?parameters.getSupportedPreviewSizes ();   Listsizes_pic=parameters.getSupportedPictureSizes ();   相机。大小cs=sizes.get (0);   int mWidth=cs.width;   int mHeight=cs.height;   参数。setPreviewSize (mWidth mHeight);   parameters.setPictureSize (sizes_pic.get (0)。宽度,sizes_pic.get (0) .height);   parameters.setJpegQuality (85);//parameters.setFocusMode (Camera.Parameters.FOCUS_MODE_AUTO);   parameters.setPictureFormat (ImageFormat.JPEG);   camera.setParameters(参数);   尝试{   camera.setPreviewDisplay (localSurface.getHolder ());   camera.startPreview ();//开始预览   camera.autoFocus(空);//自动对焦   }捕捉(IOException e) {   e.printStackTrace ();   camera.stopPreview ();   camera.release ();   相机=零;   }   }   }      @Override   公共空间surfaceDestroyed (SurfaceHolder持有人){   如果(相机!=null) {   camera.stopPreview ();   camera.release ();   相机=零;   }   }   });//设置该SurfaceView自己不维护缓冲   localSurface.getHolder () .setType (SurfaceHolder.SURFACE_TYPE_PUSH_BUFFERS);      之前      

<强> 3,获取图片

        私人空间getViewImage () {//设置监听   相机。setPreviewCallback(新Camera.PreviewCallback () {      @Override   公共空间>   公共空间rotateMyBitmap位图(bmp) {   矩阵矩阵=new矩阵();   矩阵。postScale (1,1);//镜像水平翻转(如果左右颠倒)   matrix.postRotate (180);   位图nbmp=位图。createBitmap (bmp, 0, 0, bmp.getWidth (), bmp.getHeight(),矩阵,true);   imageView.setImageBitmap (nbmp);   };   之前      

自定义时间拍照

        私人处理程序mHandler=new处理程序(){   公共空间handleMessage(消息味精){   开关(msg.what) {   101年情况:   getViewImage ();   日志。e(标签,“handleMessage:拍照”);   mHandler。sendEmptyMessageDelayed (102、100);   打破;   102年情况:   camera.setPreviewCallback(空);   打破;   }   }   };      

然后点击按钮调用
  

        mHandler。sendEmptyMessageDelayed (101、100);      

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

Android摄像头实现毫秒级拍照实例