zoukankan      html  css  js  c++  java
  • 拍照-----------android系统 至关重要的功能

     一 在Android 中,拍照对应的Action 是android.provider.MediaStore.ACTION_IMAGE_CAPTURE. 用于拍照的Activity 需要返回照片图像数据,

    摄像对应的Action 是android.provider.MediaStore.ACTION_VIDEO_CAPTURE

    因此需要使用startActivityForResult()来启动 Activity .代码如下:

    Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);

    startActivityForResult(intent,1);

    截获 Activity 返回的图像数据的事件方法是onActivityResult ,代码如下:

    protected  void onActivityResult(int  requestCode,  int resultCode, Intent data){

         if(requestCode == 1){

               if(resultCode == Activity.RESULT_OK){

                     Bitmap  bitmap = (Bitmap)data.getExtras().get("data");        //   拍照 Activity 保存图像数据的 key 是 data,返回的数据类型是 Bitmap 对象

                    imageView.setImageBitmap(bitmap);        //   在 ImageView 组件中显示拍摄的照片

            }

         }

         super.onActivityResult(requestCode, resultCode, data);

    }

    系统拍照功能 具体代码请参见 ch14_systemcamera 工程

    注意:  使用系统的拍照 通常很难拍摄大辨率的照片,但可以生成分辨率更小的照片.通过insertImage  方法可以同时在  /sdcard/DCIM/.thumbnails 和 /sdcard/DCIM/Camera  目录中分别生成分辨率为 50 X 50 和 208 X 312的图像, 代码如下:

    MediaStore.Images.Media.insertImage(getContentResolver(), cameraBitmap,null,null);

    其中 cameraBitmap 是拍照 Activity 返回的 Bitmap对象

    二 实现用户自定义拍照 Activity

    拍照的核心类是 android.hardware.Camera,通过Camera类的静态 open 可以获得Camera对象,并通过Camera 类的startPreview 方法开始拍照,最后通过Camera 类的takePicture 方法结束拍照,并在相应的事件中处理照片数据

    具体步骤如下:

    1    指定用于显示拍照过程影像的容器,通常是SurfaceHolder 对象。

    2    在拍照过程中涉及到一些状态的变化: 这些状态包括开始拍照(对应surfaceCreated 事件方法);拍照状态变化(对应surfaceChanged 事件方法);  结束拍照(对应surfaceDestroyed 事   件  方法)。这3个方法都是在SurfaceHolder.Callback 接口中定义的, 因此,需要使用SurfaceHolder 接口的addCallback 方法指定 SurfaceHolder.Callback 对象,以便实现这3种方法

    3   拍完照后需要处理照片数据。处理这些数据的工作需要在PictrueCallback 接口的onPictureTaken方法中完成。当调用Camera 类的takePicture 方法后,onPictureTaken 方法被调 用.

    4   如果需要自动对焦,需要调用Camera 类的 autoFocus 方法.该方法需要一个 AutoFocusCallback 类型的参数值. AutoFocusCallback 是一个接口,在该接口中定义了一个onAutoFocus 方法,当摄像头正在对焦或对焦成功都会调用该方法.

    具体代码请参见 ch14_camera工程

    特别注意: 用户自定义的拍照功能必须声明权限 <uses-permission android:name="android.permission.CAMERA" /> ,但在调用系统提供的拍照功能时并不需要声明

  • 相关阅读:
    疫情环境下的网络学习笔记 python 5.8 数据库入门终章
    疫情环境下的网络学习笔记 python 5.7 navicat数据库,例题,sql注入
    疫情环境下的网络学习笔记 python 5.6 暂时看看
    疫情环境下的网络学习笔记 python 5.5 MYSql 表关系,外键
    疫情环境下的网络学习笔记 python 5.4 数据库基础
    疫情环境下的网络学习笔记 python 4.30 初识数据库
    疫情环境下的网络学习笔记 python 4.29 网络小项目
    XJOI 夏令营501-511测试11 游戏
    XJOI 夏令营501-511测试11 统计方案
    CF1197D Yet Another Subarray Problem
  • 原文地址:https://www.cnblogs.com/daishuguang/p/3863934.html
Copyright © 2011-2022 走看看