zoukankan      html  css  js  c++  java
  • Android照相机应用

    前言

        Android在设计架构的时候,采用了mashup(混搭)的设计理念,也就是说一切都是组建,自己写的是组件,别人提供的也是组件,使用的时候只要符合相关协议就可以把他们当作自己的组件。比如系统提供的照相机、通讯录等等都可以直接拿来用。今天就看下照相机的相关内容。

    简单调用照相机

        如果我们的需求只是直接调用照相机,而不用做任何后续处理,那么这个就很简单了,通过传递一个intent对象,就可以直接调用照相机组件,如下所示:  

    Intent intent=new Intent(android.provider.MediaStore.ACTION_IMAGE_CAPTURE); 
    mContext.startActivity(intent);

    这样我们就把照相机组件给调出来了,然后就正常使用照相机就可以了。

    获取照相机的内容

        上一节我们简单的使用了照相机,同时照下来的内容存储到了默认路径中了,但是更多的时候我们不仅需要调用照相机进行拍照,同时还需做后续处理,
    比如把照下来的内容放到我们指定的内容区域中,这样的需求就稍微麻烦一点。这时候调用照相机的时候就需要启动一个带有返回值的照相机Activity,
    然后在接收接口中处理返回照片,如下所示:
        调用代码

    Intent intent=new Intent(android.provider.MediaStore.ACTION_IMAGE_CAPTURE); 
    activity.startActivityForResult(intent,1); 

    通过上面的代码就启动了一个带返回值的照相机Activity,完成照相后会调用返回接口,我们处理照片内容就在这个接口里面了。如下所示
       返回代码

        protected void onActivityResult(int requestCode, int resultCode, Intent data) {
            super.onActivityResult(requestCode, resultCode, data);
            switch (requestCode) {
            case 1:            
                //获取照片
                 Bundle extras = data.getExtras();
                 Bitmap bitmap = (Bitmap) extras.get("data");
                break;
    
            default:
                break;
            }
            
        }

    通过上面的代码我们就可以获取到照相机拍下来的内容了,是一个Bitmap对象,然后就可以使用这个对象,用这个对象时候我们发现这张照片并不是原始照片,而是经过压缩后的照片,如果能满足我们的需求那就ok了,如果我们需要获取到原始照片,就需要用到下面的内容了

    获取原始照片

        如果想获取原始照片,那么在传递intent对象的时候就需要进行进一步的设置了,需要把指定原始照片保存到指定路径,如下所示

        File file = new File("/sdcard/demo/temp");
        if(!file.exists()){
            file.mkdirs();
        }
        
        File imgFile = new File(tempDir,"test");
        
        Intent intent=new Intent(android.provider.MediaStore.ACTION_IMAGE_CAPTURE); 
        Uri u=Uri.fromFile(imgFile);
        //指定路径那个
        intent.putExtra(MediaStore.EXTRA_OUTPUT, u); 

    这样调用代码就写好了,照相机会把原始照片输出到/sdcard/demo/temp/test文件中

    使用原始照片

      这就很简单了,知道了路径我们可以通过各种方式来访问并处理它,下面是其中的一种方式。

         protected void onActivityResult(int requestCode, int resultCode, Intent data) {
            super.onActivityResult(requestCode, resultCode, data);
            switch (requestCode) {
            case 1:            
                //获取照片
                Uri uri = data.getData();     //获取到是图片路径
                ContentResolver cr = this.getContentResolver();
                Bitmap bitmap=null;
                try {
                    bitmap = BitmapFactory.decodeStream(cr.openInputStream(uri));
                    
                } catch (FileNotFoundException e) {
                    e.printStackTrace();
                }              
                break;
            default:
                break;
        }

    这样我们有拿到了这个bitmap,后续就随意使用了。    
        

    后记

        这篇文章简单介绍了下照相机的使用情况,当然还可以自定义照相机界面来完成,等等吧,相信有了这篇文章的简单介绍会有一个大概的轮廓,至于
        使用到什么程度还需要看具体需求,然后根据api进行进一步的定制。
        Uri:统一资源标识符(Uniform Resource Identifier,或URI)是一个用于标识某一互联网资源名称的字符串。它可以标识各种类型的资源,比如我们常见的http资源,以及ftp资源,在这篇文章中是表示一个路径资源。

    原文地址:http://www.cnblogs.com/luoaz/p/4148851.html

  • 相关阅读:
    POJ2778 DNA Sequence AC自动机上dp
    codeforces732F Tourist Reform 边双联通分量
    codeforces786B Legacy 线段树优化建图
    洛谷P3588 PUS 线段树优化建图
    codeforces1301D Time to Run 模拟
    codeforces1303B National Project 二分或直接计算
    codeforces1303C Perfect Keyboard 模拟或判断欧拉路
    codeforces1303D Fill The Bag 二进制应用+贪心
    python之路——使用python操作mysql数据库
    python之路——mysql索引原理
  • 原文地址:https://www.cnblogs.com/luoaz/p/4148851.html
Copyright © 2011-2022 走看看