下载本文档
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
【移动应用开发技术】怎么在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. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 中国颗粒测定仪行业市场现状分析及竞争格局与投资发展研究报告2024-2034版
- 中国电动回转式齿轮泵行业市场现状分析及竞争格局与投资发展研究报告2024-2034版
- 中国气压制动系统行业市场现状分析及竞争格局与投资发展研究报告2024-2034版
- 中国抗感染药行业发展分析及投资风险预测分析报告2024-2034版
- 中国太阳能LED灯串行业市场现状分析及竞争格局与投资发展研究报告2024-2034版
- 中国乙酰基四肽-11行业市场现状分析及竞争格局与投资发展研究报告2024-2034版
- 中国X光片读片机行业市场现状分析及竞争格局与投资发展研究报告2024-2034版
- 男方父亲婚礼发言稿6篇
- 孔子观后感学生3篇
- 传染病疫情防控志愿者招募
- 江苏盐城经济技术开发区村(社区)后备干部招聘笔试真题2023
- 江苏省常州市溧阳市2023-2024学年二年级下学期4月期中语文试题
- 2024届北京市海淀区高三语文一模作文汇编:“昨日之我与今日之我”
- 论文写作100问智慧树知到期末考试答案2024年
- (2024年)幼儿园生成课程
- 物业采购管理制度及采购流程.docx
- 最新基坑漏水应急预案
- 大剂量甲强龙冲击治疗知情同意书
- A901内科学-第9版配套PPT 第九篇 理化因素所致疾病 第一章 总论
- 贯彻新发展理念,ppt课件.ppt
- 外文翻译(基于PLC锅炉温度控制系统设计).doc
评论
0/150
提交评论