Android 开发——相机那点事儿

当Android手机App开发碰到需要使用手机的物理设备时,我们该如何进行合理的开发呢?我想心急的朋友一定会从网上找各种资源,先让自己看到效果之后,才会有开发的下去的想法。毕竟,站在前人种好的树下比较好乘凉吗!这里向大家推荐几篇不错的博文       但作为一个合格的Android开发工程师,弄懂这背后的原理还是很重要的,

本文档只涉及到使用手机的摄像头设备自行开发照相软件,所以,直接使用应用程序提供的Android摄像头API。那么接下来我们就来探究一下如何使用Android硬件设备——摄像头。

Step 1:工欲善其事必先利其器,进行开发前我们先来仔细看一看Android摄像头的API都为我们提供了哪些类和接口:

描述

camrea

摄像机类,用来控制摄像头拍摄图像或者从相机拍摄视频

Camera.Parameters

相机的服务设置。

SurfaceView

用来展示摄像头拍摄的实时预览图像,控制预览界面

接下来我们来看一看Camera类都为我们提供了那些主要的方法:

F.NO

描述

1

open( )

打开默认的相机

2

release( )
它被用来释放在镜头锁定,所以其他应用程序可以访问它

3

setPrameters(  )

它是用来设置相机参数,包括前后摄像头,闪光灯模式、聚焦模式、预览和拍照尺寸等。

4

setPreviewDisplay(SurfaceHolder holder)
它是用来设置预览拍照,绑定绘制预览图像的surface

5

startPreview( )
它是用来开启相机的预览给用户

6

stopPreview( )
它是用来阻止相机的预览给用户

7

takePicture(Camera.ShutterCallback shutter, Camera.PictureCallback raw, Camera.PictureCallback jpeg)
它被用来使能/禁止图像拍摄的默认快门声音

更多方法介绍请参见文档http://www.yiibai.com/android/android_camera.html

当然Camera.Parameters类中有一些必要的属性也是要我们进行设置的:

F.NO

描述

1

setPicturesize(int width,int height)

设置图片的尺寸。

setPreviewsize(int width,int height)

设置预览照片的尺寸。

setRotation(int angle)

集度相对于相机的方向顺时针旋转角度。

更多方法介绍请参见文档http://blog.csdn.net/aiqing0119/article/details/27680137

在拍照时除了设置这些照相机的设置外,我们还需要处理好手机显示屏幕的预览图像部分,这样才是一个完整可用的照相机应用。那么,接下来我们继续来讨论SurfaceView类,其实SurfaceView类听起来很抽象,很复杂,其实在这里你可以简单的把它看成是一个盛放相机照到图像的容器,就是说我们用camrea扫描到的图像用SurfaceView显示在手机屏幕上,怎么显示就要看你如何设置你的SurfaceView了,我会在后续博文中用具体的实例来演示实现手机拍照的基础的SurfaceView设置。使用手机相机编写应用程序除了要继承SurfaceView类外,还要实现SurfaceHolder.Callback接口,

SurfaceHolder.Callback接口是用于处理预览的事件,需实现如下三个方法:

I.NO

描述

surfaceCreated(SurfaceHolder holder):

预览界面创建时调用,每次界面改变后都会重新创建,需要获取相机资源并设置SurfaceHolder

surfaceChanged(SurfaceHolderholder, int format, int width, int height):

预览界面发生变化是调用,每次界面发生变化之后需要重新启动预览

surfaceChanged(SurfaceHolderholder, int format, int width, int height):

预览销毁时调用,停止预览,释放相机资源

以上准备工作理解了之后,接下来的工作就很简单了,只要按照如下步骤就可以轻松实现一个简单的Android手机相机应用程序的编写:

(1)   通过Camera.open()来获取Camera实例;

(2)   调用Camera的getParameters()方法获取拍照参数。该方法返回一个Camera.Parameters对象;

(3)   调用Camera.Parameters对象方法设置拍照参数;

(4)   调用Camera的setParameters(),并将Camera.Parameters对象作为参数传入,这样即可对相机的拍照参数进行控制;

(5)   调用Camera的startPreview()方法开始预览取景,在预览取景之前需要调用Camera的setPerviewDisplay(SurfaceHolder holder)方法设置使用哪个SurfaceView来显示取景图片;

(6)   调用Camera的takePicture()方法进行拍照;

(7)   调用Camera的stopPreview()结束取景预览,并调用release()方法释放资源;

(8)   保存图片到本地;

 

Step 2:实际案例分析

1. 开发案例1——简单的相机实现

2. 开发案例2——可以保存图片的相机

3. 开发案例3——保存指定区域的图片的相机

4. 开发案例4——整体优化设计

 

再次向大家列出我在开发Android相机时参考的几篇非常好的博文:

http://www.androidchina.net/4381.html

http://my.csdn.net/yanzi1225627

系列博文都写的非常好

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值