【移动应用开发技术】怎么在Android中利用Camera实现手动对焦_第1页
【移动应用开发技术】怎么在Android中利用Camera实现手动对焦_第2页
【移动应用开发技术】怎么在Android中利用Camera实现手动对焦_第3页
【移动应用开发技术】怎么在Android中利用Camera实现手动对焦_第4页
免费预览已结束,剩余1页可下载查看

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

【移动应用开发技术】怎么在Android中利用Camera实现手动对焦

本篇文章为大家展示了怎么在Android中利用Camera实现手动对焦,内容简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章的详细介绍希望你能有所收获。目录手动对焦的方法解析实现用户点击屏幕后,设置对焦区域和测光区域

一、手动对焦的方法手动对焦的实现主要通过两个Camera方法来进行配置:setFocusAreas设置对焦的区域setMeteringAreas设置测光的区域他们需要传入一个Camera.Area集合,Camera.Area如图:/**

*

Create

an

area

with

specified

rectangle

and

weight.

*

*

@param

rect

the

bounds

of

the

area.

*

@param

weight

the

weight

of

the

area.

*/

public

Area(Rect

rect,

int

weight)

{

this.rect

=

rect;

this.weight

=

weight;

}第一个参数是对焦和测光的区域,范围在[-1000,-1000]到[1000,1000],第二个参数是权重,范围在0到1000,当传入多个Area时,权重的大小决定着对焦或测光的优先级,如果每次只对焦一个区域,那第二个参数直接传入1000即可,大多数开发中也是如此。说到第一个参数的范围,请看下图,将更加清晰明了:我们可以看到,和手机屏幕的分辨率不同,Area到屏幕的映射区域是从左上角的-1000,-1000到右下角的1000,1000,中心点是0,0,我们点击屏幕后获取到的坐标,最终就需要转化为映射区域的坐标,这是手动对焦最为重要的环节,了解了这两个必要的参数配置后,我们就可以开始手动对焦的实现了。二、实现用户点击屏幕后,设置对焦区域和测光区域获取点击预览画面的坐标值用户点击屏幕,实际是点击的预览画面的区域,拍照功能大家肯定都知道,这个就不多解释,那么我们直接通过setOnTouchListener方法对View进行监听即可surfaceView.setOnTouchListener(new

View.OnTouchListener()

{

@Override

public

boolean

onTouch(View

v,

MotionEvent

event)

{

Log.e("MainActivity",

"X坐标:"

+

event.getX()+",Y坐标:"+event.getY());

return

false;

}

});通过MotionEvent我们就可以获取到用户点击屏幕时,相对于View的坐标值了将View坐标值转化为Area映射区域的坐标值之前说过,Area映射区域是[-1000,-1000]到[1000,1000],那么通过下面的坐标换算公式,我们就可以得到点击预览画面时,映射区域的坐标值了surfaceView.setOnTouchListener(new

View.OnTouchListener()

{

@Override

public

boolean

onTouch(View

v,

MotionEvent

event)

{

int

areaX

=

(int)

(event.getX()

/

surfaceView.getWidth()

*

2000)

-

1000;

//

获取映射区域的X坐标

int

areaY

=

(int)

(event.getY()

/

surfaceView.getWidth()

*

2000)

-

1000;

//

获取映射区域的Y坐标

return

false;

}

});获取到映射区域的坐标后,我们就要设置一个对焦的范围了,范围是灵活的,我这里就创建一个长宽是200的矩形区域surfaceView.setOnTouchListener(new

View.OnTouchListener()

{

@Override

public

boolean

onTouch(View

v,

MotionEvent

event)

{

int

areaX

=

(int)

(event.getX()

/

surfaceView.getWidth()

*

2000)

-

1000;

//

获取映射区域的X坐标

int

areaY

=

(int)

(event.getY()

/

surfaceView.getWidth()

*

2000)

-

1000;

//

获取映射区域的Y坐标

//

创建Rect区域

Rect

focusArea

=

new

Rect();

focusArea.left

=

Math.max(x

-

100,

-1000);

//

取最大或最小值,避免范围溢出屏幕坐标

focusArea.top

=

Math.max(y

-

100,

-1000);

focusArea.right

=

Math.min(x

+

100,

1000);

focusArea.bottom

=

Math.min(y

+

100,

1000);

return

false;

}

});设置对焦和测光完成这一步,那就已经实现了手动对焦了,如下代码:surfaceView.setOnTouchListener(new

View.OnTouchListener()

{

@Override

public

boolean

onTouch(View

v,

MotionEvent

event)

{

int

areaX

=

(int)

(event.getX()

/

surfaceView.getWidth()

*

2000)

-

1000;

//

获取映射区域的X坐标

int

areaY

=

(int)

(event.getY()

/

surfaceView.getWidth()

*

2000)

-

1000;

//

获取映射区域的Y坐标

//

创建Rect区域

Rect

focusArea

=

new

Rect();

focusArea.left

=

Math.max(x

-

100,

-1000);

//

取最大或最小值,避免范围溢出屏幕坐标

focusArea.top

=

Math.max(y

-

100,

-1000);

focusArea.right

=

Math.min(x

+

100,

1000);

focusArea.bottom

=

Math.min(y

+

100,

1000);

//

创建Camera.Area

Camera.Area

cameraArea

=

new

Camera.Area(focusArea,

1000);

List<Camera.Area>

meteringAreas

=

new

ArrayList<Camera.Area>();

List<Camera.Area>

focusAreas

=

new

ArrayList<Camera.Area>();

if

(mParameters.getMaxNumMeteringAreas()

>

0)

{

meteringAreas.add(cameraArea);

focusAreas.add(cameraArea);

}

mParameters.setFocusMode(Camera.Parameters.FOCUS_MODE_AUTO);

//

设置对焦模式

mParameters.setFocusAreas(focusAreas);

//

设置对焦区域

mParameters.setMeteringAreas(meteringAreas);

//

设置测光区域

try

{

mCamera.cancelAutoFocus();

//

每次对焦前,需要先取消对焦

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论