Android中使用Camera

标签: android 摄像头 图片
353人阅读 评论(0) 收藏 举报
分类:

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;
                        }
                    });
                }
            }
        });
    }
}

查看评论

什么是XForms?

什么是XForms?当前的Web表单的设计无法从表单的表述中分离表单的目的或用途,然而XForms, , 由分别描述表单行为和样式的独立单元组成,这就允许柔性表述选择, 包含经典的XHTML表单,附加...
  • FlySpace
  • FlySpace
  • 2003-05-17 17:29:00
  • 1508

Android中Camera使用案例

  • 2016年07月28日 21:44
  • 4.93MB
  • 下载

AndroidCamera使用

一个快速的方法来拍照或录像就是使用一个意图来调用Android手机上的相机应用程序来拍照或摄像。 使用相机意图需要通过以下步骤: 1. 创建一个意图,请求图像或视频: MediaStore.ACTIO...
  • zhangying1994
  • zhangying1994
  • 2016-05-25 20:35:20
  • 792

Android Camera开发(一)之基础知识

概述Android手机关于Camera的使用,一是拍照,二是摄像,由于Android提供了强大的组件功能,为此对于在Android手机系统上进行Camera的开发,我们可以使用两类方法:一是借助Int...
  • huaxun66
  • huaxun66
  • 2016-11-09 09:47:44
  • 5459

Android中Camera的开发的简单例子

看了好久官方的文档,研究了好长时间,明明感觉很简单的东西,却一直不成功,最后明白了问题所在,原来是一个很简单的小问题,顿时欲哭无泪。先贴上代码package com.XC.camerastudy;im...
  • xingchenxuanfeng
  • xingchenxuanfeng
  • 2016-03-24 11:25:38
  • 1482

Android基础入门教程——9.3 使用Camera拍照

本节给大家带来的是Android中Camera的使用,简单点说就是拍照咯,无非两种, 1.调用系统自带相机拍照,然后获取拍照后的图片 2.要么自己写个拍照页面 本节我们来写两个简单的例子体验下上...
  • zpj779878443
  • zpj779878443
  • 2015-11-22 15:56:19
  • 181969

Android Camera的使用 (一)

一、前言 在android 5.0 之后 官方已经不推荐Camear这个类了,而是推荐 android.hardware.camera2 包下的api.但我们还是有必要学习一下。Camera这个类可...
  • a992036795
  • a992036795
  • 2016-08-10 13:39:48
  • 1185

android设备功能之camera教程实例汇总

android设备功能之camera教程实例汇总
  • u014608640
  • u014608640
  • 2016-09-09 15:03:08
  • 678

Android Camera的使用 (三)

一、创建一个Camear App二、创建拍照功能 创建一拍照我们分以下几步: 1、检测和访问相机—–检测相机是否存在 2、创建一个用来预览的对象——创建一个 类继承自SurfaceView 并实...
  • a992036795
  • a992036795
  • 2016-08-10 15:50:31
  • 3624

Android平台Camera实时滤镜实现方法探讨(二)--Android-GPUImage探讨

上一章讨论了将处理后的数据填充到事先创建的Bitmap中,使用SurfaceView绘制该Bitmap来实现预览数据实时处理。本章介绍android-gpuimage实现方式...
  • oShunz
  • oShunz
  • 2015-11-25 16:29:48
  • 13164
    个人资料
    专栏达人
    等级:
    访问量: 54万+
    积分: 6249
    排名: 4946
    博客专栏
    最新评论
    关于我