& # 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 (); List sizes_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摄像头实现毫秒级拍照实例