Android -- camera(1)

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

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

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

<intent-filter>
<action android:name="android.media.action.IMAGE_CAPTURE"/>
<category android:name="android.intent.category.DEFAULT"/>
</intent-filter>

为了通过一个意图利用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);
}
}
}


<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
>
<ImageView
androidandroid:id="@+id/ReturnedImageView"
android:layout_width=  "wrap_content"
android:layout_height="wrap_content">
</ImageView>
</LinearLayout>

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

转载请注明出处:http://www.cnblogs.com/yydcdut/p/3744874.html

Android -- camera(1),布布扣,bubuko.com

时间: 2024-10-11 21:16:16

Android -- camera(1)的相关文章

Android Camera 拍照 三星BUG总结

Android Camera 三星BUG  : 最近在Android项目中使用拍照功能 , 其它型号的手机运行成功了  唯独在三星的相机上遇到了bug . BUG具体体现为 : (1) 摄像头拍照后图片数据不一定能返回 ;  onActivityResult的data为空 (2) 三星的camera强制切换到横屏  导致Activity重启生命周期 (但是部分机型  配置  android:configChanges  也不能阻止横竖屏切换); 我的解决方法为 如果 activity 的销毁如果

Android Camera探究之路——起步

Android Camera探究之路--起步 Camera在手机中有着举足轻重的地位,无论是二维码还是照片.识别.都离不开摄像头,本文将对Android中的Camera进行全面解析. 权限镇楼: <uses-permission android:name="android.permission.CAMERA"/> <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE&

【Android】Android Camera原始帧格式转换 —— 获取Camera图像(一)

 概述: 做过Android Camera图像采集和处理的朋友们应该都知道,Android手机相机采集的原始帧(RawFrame)默认是横屏格式的,而官方API有没有提供一个设置Camera采集图像的方向的方法,导致我们拿到原始帧后还需要再次对其进行转换为对应需求的数据,例如YUV的格式,图像的方向等(旋转多少度合适),下面我就粗略的介绍一下大致的流程,理解浅薄,大神请勿喷. 注意:当前还都是基于API<21的内容,如果压根不用android.hardware.Camera的话可能有区别,还没研

Android -- Camera源码简析,启动流程

com.android.camera.Camera.java,主要的实现Activity,继承于ActivityBase. ActivityBase 在ActivityBase中执行流程: onCreate中进行判断是否是平板: onResume中判断是否锁屏,锁屏&camera不存在时候,mOnResumePending置为true,否则置为false并执行doOnResume: onWindowFocusChanged中判断是否获取到焦点&mOnResumePending,满足的话执行

android Camera拍照

通过Camera进行拍照步骤: 调用Camera的open()方法打开相机.该方法默认打开后置摄像头.如果需要打开指定摄像头,可以为该方法传入摄像头ID. 调用Camera的getParameters()方法获取拍照参数.该方法返回一个Camera.Parameters对象 调用Camera.Parameters对象方法设置拍照参数 调用Camera的startPreview()方法开始预览取景,在预览取景之前需要调用Camera的setPreviewDisplay(SurfaceHolder

Android Camera拍照 压缩

http://www.linuxidc.com/Linux/2014-12/110924.htm package com.klp.demo_025; import java.io.ByteArrayInputStream; import java.io.ByteArrayOutputStream; import java.io.File; import java.io.FileOutputStream; import android.app.Activity; import android.co

Android学习十---Android Camera

Android camera用来拍照和拍摄视频的先看一下最后实现的效果图             最后的效果图 一.准备 在你的应用程序上使用android拍照设备,需要考虑以下几个方面 1. 是否是一定需要camera 如果需要,那么就无法安装在没有摄像头的设备. 需要在mainfest 中声明 <uses-permission android:name="android.permission.CAMERA" /> <uses-feature android:nam

Android Camera子系统之进程/文件View

本文基于Android 4.2.2从进程/文件的角度审视Android Camera子系统. AndroidCamera子系统的整体架构分成客户端(Client)和服务器(Server)两个部分,它们建立在Android的进程间通讯机制Binder的基础之上. 查看进程 [email protected]:/# ps USER  PID  PPID  VSIZE   RSS    WCHAN   PC        NAME media 1012    1  37484  8740 ffffff

Android Camera子系统之用户View

一.拍照模式 打开原生Camera应用,将出现如下所示拍照界面 左边为预览区域,右边为控制面板. 控制面板分为三部分,从上到下依次为缩略图.快门按钮和模式选择器. 模式选择器中显示当前模式为拍照模式. 按下快门按钮将会执行拍照操作,缩略图区域显示所拍照片的缩略图. 二.录像模式 点击模式选择器区域,选择录像模式,将会进入录像界面,如下图所示 点击快门按钮将会开始录像,再次点击快门,结束录像. Android Camera子系统之用户View,码迷,mamicode.com

Android Camera开发之基础知识篇

概述 Android框架支持设备的相机拍照和录像功能,你的应用可以直接调用系统的Camera应用来拍照或者录像(比如微信拍照),当然也可以利用Android系统提供的API开发一个Camera应用来实现相机拍照和录像功能(比如市面上流行的360相机).此篇文章主要记录相机开发有关的基础知识,以及带着自己的理解翻译Camera官方文档,如有翻译不恰当支出,还请指出改正.当然我会开一个有关相机开发的一个系列,该系列主要内容包括如下: 相机基本预览拍照功能. 实现相机的Flash,Hdr,滤镜,前后摄