【转】android Camera 中添加一种场景模式
http://blog.csdn.net/fulinwsuafcie/article/details/8833652
首先,来了解一下什么是场景模式。
最简单的方法当然是google了,这里有一篇文章讲得比较通俗易懂。http://publish.it168.com/cword/2819.shtml
内容如下:
一般而言,数码相机内预先调节好光圈、快门、焦距、测光方式及闪光灯等参数值,以便于那些经验不足的用户拍出有一定质量保证的数码相片。不过用现有的模式也未必能拍出高质量的照片。相当一部份朋友使用的是数码相机的AUTO(自动)模式,而在特定的拍摄环境中,其相片质量当然难以保障。因此为了更加方便初级用户的使用,数码相机厂商在数码相机内加入了数种场景模式,这样就更加方便拍出高质量的照片。目前,数码相机内的场景模式少则有四、五种,多则有二三十种。
有些相机则是通过菜单来选择不同的场景模式
以下最常见的八种模式:
风景模式:拍摄风景名胜时,数码相机会把光圈调到最小以增加景深,另外对焦也变成无限远,使相片获得最清晰的效果。
人像模式:用来拍摄人物相片,如证件照。数码相机会把光圈调到最大,做出浅景深的效果。而有些相机还会使用能够表现更强肤色效果的色调、对比度或柔化效果进行拍摄,以突出人像主体。
夜景模式:夜景模式一般有两种,前者使用1/10秒左右的快门进行拍摄,从而有可能导致曝光不足。而后者则使用数秒长的快门曝光时间,以保证相片充分曝光,相片画面也会比较亮。上述两种都使用较小的光圈进行拍摄,同时闪光灯也会关闭。
夜景人像模式:在夜景中拍摄人物(如逛灯会),数码相机通常会使用数秒至1/10秒左右的快门拍摄远处的风景,并使用闪光灯照亮前景的人物主体,闪光灯通常会在快闪关闭前被触发。
动态模式(运动模式):用来拍摄高速移动的物体,数码相机会把快门速度调到较快(1/500秒),或提高ISO感光值。
微距模式:用来拍摄细微的目标如花卉、昆虫等等,数码相机会使用“微距”焦距,并关闭闪光灯。
逆光模式:在一些背光的环境下使用,即主体的背后有较强的光线。相机会采用重点测光以增强曝光的准确性、并增加EV值以避免主体过暗,有些相机还会使用闪光灯进行补光。
全景模式:拍摄超宽幅度的画面(如山脉、大海)时,数码相机会在每张相片后留出多余位置,帮助摄影者连续拍摄多张风景相片,再组成一张超宽的风景照。
现在智能手机的摄像头一般都在 5M, 8M, 12M, 高的都有 13M, 如 sony 的 Xperia™ ZL L35h 手机。可以媲美一般的卡片相机了。也有很多的参数可调,其中就包括了场景模式。
MTK android 平台中,它的场景模式设置是写在 cfg_ftbl_custom_raw_main.h 文件中的。
Location: \ALPS.ICS***\mediatek\custom\project_name\hal\camera\camera\cfg_ftbl_custom_raw_main.h
- #if 1
- // Scene Mode
- CONFIG_FEATURE(FID_SCENE_MODE,
- BY_DEFAULT(SCENE_MODE_OFF),
- SCENE_MODE_OFF, SCENE_MODE_PORTRAIT, SCENE_MODE_NORMAL,
- SCENE_MODE_LANDSCAPE, SCENE_MODE_NIGHTSCENE, SCENE_MODE_NIGHTPORTRAIT,
- SCENE_MODE_THEATRE, SCENE_MODE_BEACH, SCENE_MODE_SNOW,
- SCENE_MODE_SUNSET, SCENE_MODE_STEADYPHOTO, SCENE_MODE_FIREWORKS,
- SCENE_MODE_SPORTS, SCENE_MODE_PARTY, SCENE_MODE_CANDLELIGHT
- )
- #endif
可以看到底层是支持了很多的场景模式的。需要哪个,写到这个表里面就可以。如我们需要添加一个 normal 模式,把 SCENE_MODE_NORMAL 写到这个表里面就可以了,当然这个也是需要 硬件支持的,需要先行查看一下该 sensor 是否支持该场景模式才行。
完了之后编译,最后编译出来 libcamera.custom.so 库文件 push 到手机 system/lib 目录下面重启 mediaServer 即可支持该场景模式了。
在上层可以通过在 CameraSettings.java 文件中的 initPreference 函数中添加如下代码,即可在上层打log出来看都支持哪些模式了。
- if (sceneMode != null) {
- filterUnsupportedOptions(group,
- sceneMode, mParameters.getSupportedSceneModes());
- List<String> supportSceneMode = mParameters.getSupportedSceneModes();
- for (int i = 0; i < supportSceneMode.size(); i++) {
- Log.d(TAG, "supportSceneMode : " + i + " : " + supportSceneMode.get(i));
- }
- }
log 显示如下:
07-01 08:35:48.782 D/zpj ( 3575): supportSceneMode : 0 : auto
07-01 08:35:48.782 D/zpj ( 3575): supportSceneMode : 1 : portrait
07-01 08:35:48.782 D/zpj ( 3575): supportSceneMode : 2 : normal
07-01 08:35:48.782 D/zpj ( 3575): supportSceneMode : 3 : landscape
07-01 08:35:48.782 D/zpj ( 3575): supportSceneMode : 4 : night
07-01 08:35:48.782 D/zpj ( 3575): supportSceneMode : 5 : night-portrait
07-01 08:35:48.782 D/zpj ( 3575): supportSceneMode : 6 : theatre
07-01 08:35:48.783 D/zpj ( 3575): supportSceneMode : 7 : beach
07-01 08:35:48.783 D/zpj ( 3575): supportSceneMode : 8 : snow
07-01 08:35:48.783 D/zpj ( 3575): supportSceneMode : 9 : sunset
07-01 08:35:48.783 D/zpj ( 3575): supportSceneMode : 10 : steadyphoto
07-01 08:35:48.783 D/zpj ( 3575): supportSceneMode : 11 : fireworks
07-01 08:35:48.783 D/zpj ( 3575): supportSceneMode : 12 : sports
07-01 08:35:48.783 D/zpj ( 3575): supportSceneMode : 13 : party
07-01 08:35:48.783 D/zpj ( 3575): supportSceneMode : 14 : candlelight
如果需要添加菜单之类的,还需要修改到 app 中的 pref_camera_scenemode_key 配置项。
【转】android Camera 中添加一种场景模式的更多相关文章
- android Camera 中添加一种场景模式
转自:http://blog.csdn.net/fulinwsuafcie/article/details/8833652 首先,来了解一下什么是场景模式. 最简单的方法当然是google了,这里有一 ...
- Android编程中的5种数据存储方式
Android编程中的5种数据存储方式 作者:牛奶.不加糖 字体:[增加 减小] 类型:转载 时间:2015-12-03我要评论 这篇文章主要介绍了Android编程中的5种数据存储方式,结合实例形式 ...
- Android系统中的6种模式
Android系统中的6种模式 1:一般启动模式(normal mode): 功能是正常启动手机,方法为关机状态下按电源键启动. 2:安全模式(safe mode): 此模式和正常启动一样 ...
- Android.mk中添加宏定义
在Boardconfig.mk 中添加一个 IS_FLAG := true 由于Boardconfig.mk和各目录的Android.mk是相互关联的 所以我们可以在Android.mk 中添加 一个 ...
- 关于如何正确地在android项目中添加第三方jar包
在android项目中添加第三方jar包虽然不是一个很复杂的问题,但是确实给很多开发者带来了不小的困扰.我自己就曾经碰到过calss not found exception.error inflati ...
- 如何在Android Studio中添加注释模板信息?
如何在Android Studio中添加注释模板信息? 在开发程序的时候,我们一般都会给文件自动添加上一些关于文件的注释信息,比如开发者的名字,开发的时间,开发者的联系方式等等.那么在android ...
- Android.mk中添加宏定义【转】
本文转载自:http://blog.csdn.net/huangyabin001/article/details/38302021 在Boardconfig.mk 中添加一个 IS_FLAG := t ...
- Android平台中的三种翻页效果机器实现原理
本文给开发者集中展现了Android平台中的三种翻页效果机器实现原理,希望能够对开发者有实际的帮助价值! 第一种翻页效果如下: 实现原理: 当前手指触摸点为a,则 a点坐标为(ax,ay), ...
- android开发中的5种存储数据方式
数据存储在开发中是使用最频繁的,根据不同的情况选择不同的存储数据方式对于提高开发效率很有帮助.下面笔者在主要介绍Android平台中实现数据存储的5种方式. 1.使用SharedPreferences ...
随机推荐
- 【MS Office2013小技巧】Word中公式中的等号对齐
步骤: 1. 先将所需要对齐的公式分不同行打出来: 2. 选中所有公式,右键点击并选择“对齐点(A) =”,如图 此时,如果能够正常对齐,则无需进行下面的步骤,但如果出现下图情况并未正常对齐的,再进行 ...
- LightOj_1287 Where to Run
题目链接 题意: 有n个街口和m条街道, 你后边跟着警察,你需要进行大逃亡(又是大爱的抢银行啊),在每个街口你都有≥1个选择, 1)停留在原地5分钟. 2)如果这个街口可以到xi这个街口, 并且, 通 ...
- 点击播放js
<div class="videobox" id="videobox"> <img src="temp/pic1.jpg" ...
- bzoj 2852: 强大的区间 辗转相除
2852: 强大的区间 Time Limit: 5 Sec Memory Limit: 128 MBSubmit: 45 Solved: 12[Submit][Status][Discuss] D ...
- uva 1482 - Playing With Stones
对于组合游戏的题: 首先把问题建模成NIM等经典的组合游戏模型: 然后打表找出,或者推出SG函数值: 最后再利用SG定理判断是否必胜必败状态: #include<cstdio> #defi ...
- tornado异步请求非阻塞
前言也许有同学很迷惑:tornado不是标榜异步非阻塞解决10K问题的嘛?但是我却发现不是torando不好,而是你用错了 比如最近发现一个事情:某网 前言 也许有同学很迷惑:tornado不是标榜异 ...
- malloc(0)的问题
http://blog.csdn.net/js_xj/article/details/5826042 解答: 首先来解释malloc(0)的问题,这个语法是对的,而且确实也分配了内存,但是内存空间是0 ...
- 程序异常捕获库 - CrashRpt
CrashRpt.dll用来在应用程序出现异常crash时,捕获到错误. 并收集出错信息: MiniDump文件.硬件信息.系统信息.出错信息.进程信息.服务信息.驱动信息.启动信息.软件列表.端口信 ...
- swift 学习资源
http://blog.csdn.net/sqc3375177/article/details/29206779
- Navicate使用注意事项
2. Navicat如何连接数据库:点击连接——>输入连接名,然后如果是本机不用更改localhost,如果是别的主机,要将对方 的ip地址输入,端口号3306不变,用户名root,密 ...