android Camera相机类

摘要:
与Camera类Camera相关的几个流方法。open(cameraId)打开照相机照相机。setDisplayOrientation(0)设置相机水平方向mCamera。setPreviewDisplay(holder)在SurfaceHolder mCamera上显示图片。setPreviewCallback(callback)设置回调,并将Yuv数据传输到onPreviewFrame方法

Camera相机类相关的几个流程方法

Camera.open(cameraId) 打开相机

camera.setDisplayOrientation(0) 设置相机水平方向

mCamera.setPreviewDisplay(holder) 在SurfaceHolder上显示画面

mCamera.setPreviewCallback(callback) 设置回调,将Yuv数据传递到onPreviewFrame方法

previewRate mParams = mCamera.getParameters() 获取相机相关参数

mCamera.stopPreview() 停止预览

mCamera.release() 释放相机

实现Camera.PreviewCallback接口获取Yuv视频流

@Override
public void onPreviewFrame(byte[] bytes, Camera camera) {
       //获取实时的Yuv数据流
}

实现Camera.PictureCallback接口实现拍照

private Camera.PictureCallback mPictureCallback = new Camera.PictureCallback() {
    @Override
    public void onPictureTaken(byte[] data, Camera camera) {
         String pictureDir = Environment.getExternalStorageDirectory() + File.separator +"Videocmo/images";
         String pictureName = DateFormat.format("yyyyMMddHHmmss",new Date()).toString()+ ".jpg";
         String path=pictureDir+ File.separator + pictureName;
         try {
              File file = new File(pictureDir);
              if (!file.exists()) {
                   file.mkdirs();
              }
              FileOutputStream fos = new FileOutputStream(path);
              fos.write(data);
              fos.close();
         } catch (FileNotFoundException ignored) {
         } catch (IOException ignored) {
         }
   }
};
mCamera.takePicture(
null, null, mPictureCallback);

寻找相机

private int findCamera(boolean isfront) {
    int cameraCount = 0;
    Camera.CameraInfo cameraInfo = new Camera.CameraInfo();
    cameraCount = Camera.getNumberOfCameras();

    for (int camIdx = 0; camIdx < cameraCount; camIdx++) {
        Camera.getCameraInfo(camIdx, cameraInfo);
        if (isfront) {
            // CAMERA_FACING_FRONT前置
            if (cameraInfo.facing == Camera.CameraInfo.CAMERA_FACING_FRONT) {
                return camIdx;
            }
        } else {
            // CAMERA_FACING_BACK后置
            if (cameraInfo.facing == Camera.CameraInfo.CAMERA_FACING_BACK) {
                return camIdx;
            }
        }

    }
    return -1;
}

Camera.Parameters相机参数类

Camera.Parameters parameters = camera.getParameters(); //获取相机参数

List<Size> supportedPreviewSizes = parameters.getSupportedPreviewSizes(); //获取摄像头支持的各种分辨率

parameters.setPictureFormat(PixelFormat.JPEG);//设置照片格式

parameters.setPreviewSize(witdh,height); //设置预览尺寸

parameters.setPictureSize(witdh,height); //设置分辨率

camera.setParameters(parameters);//提交相机参数

设置相机分辨率

private void initCamera(Camera mCamera){
    if(mCamera != null){
        try{
            mParams = mCamera.getParameters();
            Size previewSize = CamParaUtil.getInstance().getPropPreviewSize(mParams.getSupportedPreviewSizes(),1.333f, 640);
            Log.d("log", String.valueOf(previewSize.width) + "-" + previewSize.height);
            pWidth = previewSize.width;
            pHeight = previewSize.height;
            mParams.setPreviewSize(pWidth, pHeight);

            List<String> focusModes = mParams.getSupportedFocusModes();
            if(focusModes.contains("continuous-video")){
                mParams.setFocusMode(Camera.Parameters.FOCUS_MODE_CONTINUOUS_VIDEO);
            }
            mCamera.setParameters(mParams);
            mCamera.startPreview();

            isPreviewing = true;
            mPreviwRate = previewRate;
        }catch (Exception ex){
            ex.printStackTrace();
        }

    }
}

public Size getPropPreviewSize(List<Size> list, float th, int minWidth){
    Collections.sort(list, sizeComparator);

    int i = 0;
    for(Size s:list){
        if((s.width >= minWidth) && equalRate(s, th)){
            break;
        }
        i++;
    }
    if(i == list.size()){
    }
    return list.get(i);
}

 相关阅读

SurfaceView开启相机预览

免责声明:文章转载自《android Camera相机类》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇iOS基础CGAffineTransform的简单使用Eclipse中配置Ehcache提示信息下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

Away3D基础之摄像机

转自:http://blog.csdn.net/cceevv/article/details/8571860 原英文地址:http://www.flashmagazine.com/Tutorials/detail/away3d_basics_the_cameras/ 翻译原文地址:http://blog.csdn.net/liminxin272/artic...

深入研究自监督单目深度估计:Monodepth2

作者:Gus 来源:微信公众号|3D视觉工坊(系投稿) 3D视觉精品文章汇总:https://github.com/qxiaofan/awesome-3D-Vision-Papers/ 单目深度估计模型Monodepth2对应的论文为Digging Into Self-Supervised Monocular Depth Estimation,由伦敦大学学...

每次都能让人头大的 Shader -- 从一次简单的功能说起

  最近有个功能, 要渲染从主相机视角看到的另一个相机的可视范围和不可见范围, 大概如下图 :    简单来说就是主相机视野和观察者相机视野重合的地方, 能标记出观察者相机的可见和不可见, 实现原理就跟 ShadowMap 一样, 就是有关深度图, 世界坐标转换之类的, 每次有此类的功能都会很悲催, 虽然它的逻辑很简单, 可是用Unity3D做起来很麻烦...

Android 多媒体------相机

一.拍照 1.设置使用相机权限 为了让用户知道我们的应用需要依赖相机,在Manifest清单文件中添加<uses-feature>标签: <manifest ... > <uses-feature android:name="android.hardware.camera" andr...

Unity+NGUI多分辨率适配方案

  说起unity的适配方案,网上可谓是一查一大堆,但是真正要应用到项目中的时候,总会出现各式各样的问题。由于最近自己要做一个小游戏,在开始做游戏之前,就想着先好好搞一搞适配这块,以后新起项目的时候也会用得着。 NGUI应该是现在大部分开发者都会去选择的UI插件,虽然NGUI还存在着不少问题,像是相对来说,NGUI还是比较靠谱的,所以这里只是针对NGUI做...

Halcon 单相机标定+消除径向畸变

单相机标定通常是相机使用的第一步,只有通过标定才能准确的获得相机的内参,以便于进行消除畸变、1D/2D测量等后续操作。 1、生成标定板描述文件 gen_caltab (7, 7, 0.0125, 0.5, 'caltab.descr', 'caltab.ps') 参数含义可以查手册(f1),运行后会在当前目录下生成两个文件: caltab.descr:标定...