Android中使用Camera

来源:互联网 发布:大数据相关研究课题 编辑:程序博客网 时间:2024/05/17 03:19

1.使用surfaceView来预览。

2.调用Camera来设置相机。

3.设置camera的参数。

看下面的例子:


 //设置surfaceView不需要自己维护缓冲区    surfaceView_image_show.getHolder().setType(SurfaceHolder.SURFACE_TYPE_PUSH_BUFFERS);    //获取surfaceView的SurfaceHolder    surfaceHolder = surfaceView_image_show.getHolder();    //为surfaceHolder添加一个回调监听器    surfaceHolder.addCallback(new SurfaceHolder.Callback() {        @Override        public void surfaceCreated(SurfaceHolder holder) {            initCamera();        }        @Override        public void surfaceChanged(SurfaceHolder holder, int format, int width, int height) {        }        @Override        public void surfaceDestroyed(SurfaceHolder holder) {            //如果camera不为空,释放摄像头            if(camera != null){                if(isPreview){                    camera.stopPreview();                }                camera.release();                camera = null;            }        }    });}//初始化摄像头private void initCamera(){    //如果没有预览    if(!isPreview){        camera = Camera.open(0);//打开后置摄像头        camera.setDisplayOrientation(90);    }    if(camera != null && !isPreview){        //设置Camera的参数        Camera.Parameters parameters = camera.getParameters();        parameters.setPreviewSize(screenWidth,screenHeight);//设置预览照片大小        parameters.setPreviewFpsRange(4, 10);//预览照片每秒显示多少帧的最小值和最大值        parameters.setPreviewFormat(ImageFormat.JPEG);//设置图片格式        parameters.set("jpeg-quality", 85);//设置JPG照片的质量        parameters.setPictureSize(screenWidth, screenHeight);//设置图片大小        try {            camera.setPreviewDisplay(surfaceHolder);//通过SurfaceView显示取景画面        } catch (IOException e) {            e.printStackTrace();        }        camera.startPreview();//开始预览        isPreview = true;    }}//控制摄像头自动对焦public void capture(View view){    if(camera != null){        //控制摄像头自动对焦后才拍照        camera.autoFocus(new Camera.AutoFocusCallback() {            @Override            public void onAutoFocus(boolean success, Camera camera) {                if(!success){                    camera.takePicture(new Camera.ShutterCallback() {                        @Override                        public void onShutter() {                            //按下快门会执行此处代码                        }                    }, new Camera.PictureCallback() {                        @Override                        public void onPictureTaken(byte[] data, Camera camera) {                            //此处代码可以决定是否需要保存原始照片信息                        }                    }, new Camera.PictureCallback() {                        @Override                        public void onPictureTaken(byte[] data, Camera camera) {                            //根据拍照所取得的数据创建位图                            final Bitmap bm = BitmapFactory.decodeByteArray(data, 0, data.length);                            View view =  getLayoutInflater().inflate(R.layout.save_camera_img, null);                            ImageView camera_img = (ImageView)view.findViewById(R.id.ImageView_camera_showimg);                            camera_img.setImageBitmap(bm);                            AlertDialog.Builder dialog = new AlertDialog.Builder(CameraActivity.this)                                    .setView(view)                                    .setNegativeButton("取消", null)                                    .setPositiveButton("确定", new DialogInterface.OnClickListener() {                                        @Override                                        public void onClick(DialogInterface dialog, int which) {                                            //跳转到图片编辑界面,并将该Bitmap对象传过去                                            File file = new File(Environment.getExternalStorageDirectory(),                                                    UUID.randomUUID().toString()+".jpg");                                            try {                                                FileOutputStream fos = new FileOutputStream(file);                                                bm.compress(Bitmap.CompressFormat.JPEG,100,fos);                                                fos.close();                                            } catch (FileNotFoundException e) {                                                e.printStackTrace();                                            } catch (IOException e) {                                                e.printStackTrace();                                            }                                            Intent intent = new Intent(CameraActivity.this, EditCameraImgActivity.class);                                            intent.putExtra("cameraImgPath",file.getAbsolutePath());                                            CameraActivity.this.startActivity(intent);                                            CameraActivity.this.finish();                                        }                                    });                            dialog.create().show();                            camera.stopPreview();                            camera.startPreview();                            isPreview  = true;                        }                    });                }            }        });    }}

0 0
原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 一个月宝宝睡眠不好怎么办 个人怎么办一清pos机 社保到退休年龄未交满15年怎么办 退休时社保没交满15时怎么办 单位不支付病假工资怎么办 一年级学生上课注意力不集中怎么办 一年级学生的理解能力差怎么办 一年级学生学习太差怎么办 宝宝屁眼破皮怎么办啊 九个月婴儿不爱喝奶怎么办 十一个月婴儿发烧怎么办 四个月宝宝睡不踏实怎么办 5个月宝宝瘦了怎么办 宝宝只吃迷糊奶怎么办 宝宝五个月了不吃奶粉怎么办 1岁婴儿入睡困难怎么办 怀孕五个月胎儿肾积水怎么办 15个月宝宝总喊怎么办 学业水平考试有d怎么办 买了水果碰见领导怎么办 高一孩子不愿意上学怎么办 专家解答 孩子不愿意上学怎么办 冬天脚冷怎么办膝盖疼 拉拉裤大了怎么办小妙招 孕37周翻身困难怎么办 晚上睡不好白天犯困怎么办 抑郁症又不想起床了怎么办 儿童憋尿功能太差怎么办 一个月的宝宝睡眠不好怎么办 被商场要求撤场怎么办 上班没法接孩子放学怎么办 幼儿下午放学与上班错开怎么办 宝宝早上醒的早怎么办 晚卜睡不着尿多怎么办 要求正常休息公司不准怎么办 我早起被室友说怎么办? 小孩晚上睡的晚怎么办 初中一年级学不扎实怎么办 一年级学生上课爱说话怎么办 孩子不按时完成作业怎么办 高三理科基础不好怎么办