文档章节

Android 使用摄像头拍照

veidy
 veidy
发布于 2013/05/25 16:00
字数 534
阅读 824
收藏 9
<!-- lang: xml -->
拍照必须设置权限:

<uses-permission android:name="android.permission.CAMERA"/>

1、布局main.xml

<?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" android:gravity="center_horizontal" > <SurfaceView android:id="@+id/mySurfaceView" android:gravity="center_horizontal" android:layout_width="wrap_content" android:layout_height="200px" /> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="fill_parent" android:layout_height="wrap_content" android:gravity="center_horizontal" > <Button android:id="@+id/btnOpen" android:textSize="18px" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="打开" /> <Button android:id="@+id/btnClose" android:textSize="18px" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="关闭" /> <Button android:id="@+id/btnTake" android:textSize="18px" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="拍照" /> </LinearLayout>
<ImageView android:id="@+id/myImageView" android:layout_width="wrap_content" android:layout_height="wrap_content"/> </LinearLayout>

<!-- lang: java -->
2、初始化组件:
private SurfaceView mySurfaceView = null;//SurfaceView的引用
private SurfaceHolder mySurfaceHolder = null;//SurfaceHolder的引用
private Button btnOpen = null;//打开按钮
private Button btnClose = null;//关闭按钮
private Button btnTake = null;//拍照按钮

添加监听器:OnClickListener, SurfaceHolder.Callback super.onCreate(savedInstanceState);

	//全屏
	requestWindowFeature(Window.FEATURE_NO_TITLE); 
	getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN ,  
	WindowManager.LayoutParams.FLAG_FULLSCREEN);
    
    setContentView(R.layout.main);
    
    mySurfaceView = (SurfaceView) findViewById(R.id.mySurfaceView);//得到SurfaceView的引用
    btnOpen = (Button) findViewById(R.id.btnOpen);//得到按钮的引用
    btnClose = (Button) findViewById(R.id.btnClose);//得到按钮的引用
    btnTake = (Button) findViewById(R.id.btnTake);//得到按钮的引用
    btnOpen.setOnClickListener(this);//为按钮添加监听
    btnClose.setOnClickListener(this);//为按钮添加监听
    btnTake.setOnClickListener(this);//为按钮添加监听
    
    
    mySurfaceHolder = mySurfaceView.getHolder();//获得SurfaceHolder
    mySurfaceHolder.addCallback(this);//添加接口的实现
    mySurfaceHolder.setType(SurfaceHolder.SURFACE_TYPE_PUSH_BUFFERS);     

3、使用CAMERA拍照 private Camera myCamera = null;//Camera的引用 boolean isView = false;//是否在浏览中

1)、初始化照相机:

public void initCamera(){ if(!isView){ myCamera = Camera.open(); } if(myCamera != null && !isView){ try { Camera.Parameters myParameters = myCamera.getParameters(); myParameters.setPictureFormat(PixelFormat.JPEG); //真机删除setPreviewSize方法 myParameters.setPreviewSize(200, 200);//屏幕大小 myCamera.setParameters(myParameters); myCamera.setPreviewDisplay(mySurfaceHolder); myCamera.startPreview();//立即运行Preview } catch (IOException e) {//捕获异常 e.printStackTrace();//打印错误信息 } isView = true; } }

2、打开/关闭和拍照
	@Override
public void onClick(View v) {
	// TODO Auto-generated method stub
	switch (v.getId()) {
	//打开照相机
	case R.id.btnOpen:
		initCamera();
		break;

	case R.id.btnClose:
		if(myCamera != null && isView){//当正在显示时
			isView = false;
			myCamera.stopPreview();
			myCamera.release();
			myCamera = null;
		}
		break;
		
	//拍照
	case R.id.btnTake:
		myCamera.takePicture
(myShutterCallback, myRawCallback, myjpegCallback);
		break;
	}
}

//相机快门关闭
ShutterCallback myShutterCallback = new ShutterCallback() {
	
	@Override
	public void onShutter() {
		// TODO Auto-generated method stub
		
	}
};

//照片二进制流生成
PictureCallback myRawCallback = new PictureCallback() {
	
	@Override
	public void onPictureTaken(byte[] data, Camera camera) {
		// TODO Auto-generated method stub
		
	}
};

//预览图片
PictureCallback myjpegCallback = new PictureCallback(){
	@Override
	public void onPictureTaken(byte[] data, Camera camera) {
		Bitmap bm = 
	BitmapFactory.decodeByteArray(data, 0, data.length);
		ImageView myImageView = 
		(ImageView) findViewById(R.id.myImageView);
		myImageView.setImageBitmap(bm);//将图片显示到下方的ImageView中
		
		isView = false;
		myCamera.stopPreview();
		myCamera.release();
		myCamera = null;

		initCamera();//初始化相机
	}
};

© 著作权归作者所有

共有 人打赏支持
veidy

veidy

粉丝 131
博文 47
码字总数 18684
作品 0
深圳
程序员
私信 提问
获取Android设备上的详细的摄像头信息

如何获取Android设备上的详细的摄像头信息呢? 目前Samsung的Galaxy Tab和Nexus S均有前置摄像头,获取Android摄像头的详细信息,在Android 2.3SDK中得到了增强: 在android.hardware.Camera类...

子曰疯
2013/12/26
0
2
使用 android 的摄像头拍照

android提供了操作摄像头的API,可以通过两种做法来使用: 通过Intent直接调用系统提供的照相机功能,复用它的拍照Activity,这是最简单和最方便的办法,因为你不需要考虑手机的兼容性问题,...

华宰
2011/09/07
5K
0
Android应用开发之使用PhoneGap实现拍照上传功能

看这里:Android应用开发之使用PhoneGap实现拍照上传功能 在之前的使用Intellij Idea 搭建PhoneGap Android开发环境以及Android应用开发之使用PhoneGap实现位置上报功能两篇文章中,我们学习...

Realfighter
2015/02/05
0
3
【android学习之十五】——多媒体2:相机Camera

二、多媒体之相机Camera 手机的相机功能是当前大家玩拍照的一个必备功能,本篇的学习,我认为网上的一篇博文的讲解更容易理解一下,这里就转一下博文,自己把自己遇到的的问题给补充进来。引...

晨曦之光
2012/03/08
4.1K
1
Android Camera2 预览功能实现

1. 概述 最近在做一些关于人脸识别的项目,需要用到 Android 相机的预览功能。网上查阅相关资料后,发现 Android 5.0 及以后的版本中,原有的 Camera API 已经被 Camera2 API 所取代。 全新的...

Lightweh
2018/11/21
0
0

没有更多内容

加载失败,请刷新页面

加载更多

再谈使用开源软件搭建数据分析平台

三年前,我写了这篇博客使用开源软件快速搭建数据分析平台, 当时收到了许多的反馈,有50个点赞和300+的收藏。到现在我还能收到一些关于dataplay2的问题。在过去的三年,开源社区和新技术的发...

naughty
今天
3
0
C++网络编程(一)gRPC的编译

Google是真滴烦,整个编译链全是自家产品,在编译之前先来安装一堆东西 安装环境依赖 chocolatey Windows下的包管理系统,没有他就慢慢去下载下面的一堆乱七八糟的东西吧。CMD下执行下面这句...

Pulsar-V
今天
3
0
Python3的日期和时间

python 中处理日期时间数据通常使用datetime和time库 因为这两个库中的一些功能有些重复,所以,首先我们来比较一下这两个库的区别,这可以帮助我们在适当的情况下时候合适的库。 在Python文...

编程老陆
今天
2
0
分布式面试整理

并发和并行 并行是两个任务同时进行,而并发呢,则是一会做一个任务一会又切换做另一个任务。 临界区 临界区用来表示一种公共资源或者说是共享数据,可以被多个线程使用,但是每一次,只能有...

群星纪元
今天
3
0
手机通过wifi遥控arduino

手机下载Blinker 从Blinker官网下载手机App,安装到手机。 手机连接WiFi。 点击我的设备右上角的"+"添加设备,选择Arduino -> wifi接入,复制密钥以备后续使用。 点击新建的设备,可以在新界...

davidwbnu
昨天
4
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部