博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Android -- camera
阅读量:6040 次
发布时间:2019-06-20

本文共 2506 字,大约阅读时间需要 8 分钟。

使用内置的Camera应用程序捕获图像                                              

所有带有合适硬件(摄像头)的原版Android设备都会附带Camera应用程序。Camera应用程序包含一个意图过滤器(intent filter),它使得开发人员能够提供与Camera应用程序同等的图像捕获能力,而不必构建他们自己的定制捕获例程。

Camera应用程序在其清单文件中指定了以下意图过滤器。这里显示的意图过滤器包含在"Camera"活动标记内。

为了通过一个意图利用Camera应用程序,我们所要做的仅仅是必须构造一个将由上述过滤器捕获的意图。

Intent i = new Intent("android.media.action.IMAGE_CAPTURE");

在实践中,我们可能不希望直接使用动作字符串创建意图。在这种情况下,可以指定MediaStore类中的常量ACTION_IMAGE_CAPTURE。应该使用常量而非字符串本身的原因在于,如果该字符串发生了改变(当然常量也可能会不断地改变),那么使用常量将使得我们的调用比之前使用字符串更有利于未来的变化。

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

从Camera应用程序返回数据                                                            

当然,在捕获一张图片时,如果Camera 应用程序没有将图片返回给调用活动,那么简单地使用内置的Camera应用程序捕获图像将不具有真正的作用。而为了使得它真正有用,可以将活动中的startActivity 方法替换为startActivityForResult 方法。使用该方法将允许我们访问从Camera应用程序中返回的数据,它恰好是用户以位图(Bitmap)形式捕获的图像。

import android.app.Activity;  import android.content.Intent;  import android.graphics.Bitmap;  import android.os.Bundle;  import android.widget.ImageView;  public class CameraIntent extends Activity {      final static int CAMERA_RESULT = 0;      ImageView imv;      @Override      public void onCreate(Bundle savedInstanceState) {          super.onCreate(savedInstanceState);          setContentView(R.layout.main);          Intent i = new Intent(android.provider                  .MediaStore.ACTION_IMAGE_CAPTURE);          startActivityForResult(i, CAMERA_RESULT);      }      protected void onActivityResult(int requestCode, int resultCode,              Intent intent) {          super.onActivityResult(requestCode, resultCode, intent);          if (resultCode == RESULT_OK)          {              Get Bundle extras = intent.getExtras();              Bitmap bmp = (Bitmap) extras.get("data");              imv = (ImageView) findViewById(R.id.ReturnedImageView);              imv.setImageBitmap(bmp);          }      }  }
androidandroid:id="@+id/ReturnedImageView"
android:layout_width=  "wrap_content"
android:layout_height="wrap_content">
 

Camera应用程序在一个通过意图传递的附加值(extra)中返回图像,而该意图将在onActivityResult方法中传递给主调活动。附加值的名称为"data",它包含一个Bitmap对象,需要从泛型对象将它强制转换过来。

//从意图中获取附加值  Bundle extras = intent.getExtras();   //从附加值中获取返回的图像  Bitmap bmp = (Bitmap) extras.get("data");

在我们的布局XML (layout/main.xml)文件中,有一个ImageView对象。ImageView是泛型视图的扩展,其支持图像的显示。由于我们有一个带有指定ReturnedImageView编号(id)的ImageView对象,因此需要在活动中获得它的引用,并通过setImageBitmap方法将它的Bitmap对象设置为返回的图像。这将使得应用程序用户能够查看这幅捕获的图像。

为了引用ImageView并通知它显示来自Camera的Bitmap对象,使用以下代码:

imv = (ImageView) findViewById(R.id.ReturnedImageView);  imv.setImageBitmap(bmp);

 

 

 

转载请注明出处:

你可能感兴趣的文章
下午考
查看>>
创建字符设备的三种方法
查看>>
走在网页游戏开发的路上(六)
查看>>
nginx 配置的server_name参数(转)
查看>>
Uva592 Island of Logic
查看>>
C++基础代码--20余种数据结构和算法的实现
查看>>
footer固定在页面底部的实现方法总结
查看>>
nginx上传文件大小
查看>>
数字通信原理笔记(一)---概述
查看>>
HDU 2243 考研路茫茫——单词情结(自动机)
查看>>
Dubbo OPS工具——dubbo-admin & dubbo-monitor
查看>>
Dungeon Master ZOJ 1940【优先队列+广搜】
查看>>
Delphi 中的 XMLDocument 类详解(5) - 获取元素内容
查看>>
2013年7月12日“修复 Migration 测试发现的 Bug”
查看>>
学习vue中遇到的报错,特此记录下来
查看>>
CentOS7 编译安装 Mariadb
查看>>
jstl格式化时间
查看>>
一则关于运算符的小例
查看>>
centos7 ambari2.6.1.5+hdp2.6.4.0 大数据集群安装部署
查看>>
cronexpression 详解
查看>>