当前位置: 移动技术网 > IT编程>移动开发>Android > android Camera相机类

android Camera相机类

2018年08月20日  | 移动技术网IT编程  | 我要评论

死神546,百事乐讨论网,苏宁配送范围

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接口实现拍照

@override
public void onpicturetaken(byte[] bytes, camera camera) {
    try {
        fileoutputstream fileoutputstream=new fileoutputstream("/mnt/sdcard/dcim/cameras/"+system.currenttimemillis()+".png");
        fos.write(bytes);
        fos.close();
        //重新打开预览    
        camera.stoppreview();
        camera.startpreview();
    } catch (filenotfoundexception e) {
        e.printstacktrace();
    }
}

寻找相机

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开启相机预览

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

相关文章:

验证码:
移动技术网