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

  1. #if 1
  2. //  Scene Mode
  3. CONFIG_FEATURE(FID_SCENE_MODE,
  4. BY_DEFAULT(SCENE_MODE_OFF),
  5. SCENE_MODE_OFF,       SCENE_MODE_PORTRAIT,    SCENE_MODE_NORMAL,
  6. SCENE_MODE_LANDSCAPE, SCENE_MODE_NIGHTSCENE,  SCENE_MODE_NIGHTPORTRAIT,
  7. SCENE_MODE_THEATRE,   SCENE_MODE_BEACH,       SCENE_MODE_SNOW,
  8. SCENE_MODE_SUNSET,    SCENE_MODE_STEADYPHOTO, SCENE_MODE_FIREWORKS,
  9. SCENE_MODE_SPORTS,    SCENE_MODE_PARTY,       SCENE_MODE_CANDLELIGHT
  10. )
  11. #endif

可以看到底层是支持了很多的场景模式的。需要哪个,写到这个表里面就可以。如我们需要添加一个 normal 模式,把 SCENE_MODE_NORMAL 写到这个表里面就可以了,当然这个也是需要 硬件支持的,需要先行查看一下该 sensor 是否支持该场景模式才行。

完了之后编译,最后编译出来 libcamera.custom.so 库文件 push 到手机 system/lib 目录下面重启 mediaServer 即可支持该场景模式了。

在上层可以通过在 CameraSettings.java 文件中的 initPreference 函数中添加如下代码,即可在上层打log出来看都支持哪些模式了。

  1. if (sceneMode != null) {
  2. filterUnsupportedOptions(group,
  3. sceneMode, mParameters.getSupportedSceneModes());
  4. List<String> supportSceneMode = mParameters.getSupportedSceneModes();
  5. for (int i = 0; i < supportSceneMode.size(); i++) {
  6. Log.d(TAG, "supportSceneMode : " + i + " : " + supportSceneMode.get(i));
  7. }
  8. }

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 中添加一种场景模式的更多相关文章

  1. android Camera 中添加一种场景模式

    转自:http://blog.csdn.net/fulinwsuafcie/article/details/8833652 首先,来了解一下什么是场景模式. 最简单的方法当然是google了,这里有一 ...

  2. Android编程中的5种数据存储方式

    Android编程中的5种数据存储方式 作者:牛奶.不加糖 字体:[增加 减小] 类型:转载 时间:2015-12-03我要评论 这篇文章主要介绍了Android编程中的5种数据存储方式,结合实例形式 ...

  3. Android系统中的6种模式

    Android系统中的6种模式 1:一般启动模式(normal mode):    功能是正常启动手机,方法为关机状态下按电源键启动. 2:安全模式(safe mode):    此模式和正常启动一样 ...

  4. Android.mk中添加宏定义

    在Boardconfig.mk 中添加一个 IS_FLAG := true 由于Boardconfig.mk和各目录的Android.mk是相互关联的 所以我们可以在Android.mk 中添加 一个 ...

  5. 关于如何正确地在android项目中添加第三方jar包

    在android项目中添加第三方jar包虽然不是一个很复杂的问题,但是确实给很多开发者带来了不小的困扰.我自己就曾经碰到过calss not found exception.error inflati ...

  6. 如何在Android Studio中添加注释模板信息?

    如何在Android Studio中添加注释模板信息? 在开发程序的时候,我们一般都会给文件自动添加上一些关于文件的注释信息,比如开发者的名字,开发的时间,开发者的联系方式等等.那么在android ...

  7. Android.mk中添加宏定义【转】

    本文转载自:http://blog.csdn.net/huangyabin001/article/details/38302021 在Boardconfig.mk 中添加一个 IS_FLAG := t ...

  8. Android平台中的三种翻页效果机器实现原理

    本文给开发者集中展现了Android平台中的三种翻页效果机器实现原理,希望能够对开发者有实际的帮助价值! 第一种翻页效果如下:     实现原理: 当前手指触摸点为a,则 a点坐标为(ax,ay), ...

  9. android开发中的5种存储数据方式

    数据存储在开发中是使用最频繁的,根据不同的情况选择不同的存储数据方式对于提高开发效率很有帮助.下面笔者在主要介绍Android平台中实现数据存储的5种方式. 1.使用SharedPreferences ...

随机推荐

  1. 【WPF】逻辑树和视觉树

    WPF中提供了遍历逻辑树和视觉树的辅助类:System.Windows.LogicalTreeHelper和 System.Windows.Media.VisualTreeHelper. 注意遍历的位 ...

  2. jsp调用javabean出现错误HTTP Status 500 - Unable to compile class for JSP

    HTTP Status 500 - Unable to compile class for JSP:   type Exception report message Unable to compile ...

  3. S3C2440的LCD虚拟显示测试

    一.概述   S3C2440的LCD控制器支持虚拟显示,说的容易理解一点就是,可以显示比实际显示器大的图像.可以这样想象,有一个大的图片,但是显示器(显示串口)比较小,但是我们可以相对于大图片(即大图 ...

  4. Cocoapod错误 - Xcode6.4

    当我从Xcode 6.3切换到Xcode6.4的时候,因为我是mac上安装了两个不同的版本,现在把Xcode 6.3卸掉了. 现在再次运行pod install命令的时候,提示如下错误:   Upda ...

  5. Django 数据库查询优化

    Django数据层提供各种途径优化数据的访问,一个项目大量优化工作一般是放在后期来做,早期的优化是“万恶之源”,这是前人总结的经验,不无道理.如果事先理解Django的优化技巧,开发过程中稍稍留意,后 ...

  6. QLGame 2D Engine编写环境搭建

    QLGame 2D Engine编写 (win7环境搭建) 广州麒麟网络工作室,计划制作一款2d game engine,基于opengl(es)平台,暂时支持android,以后考虑支持linux, ...

  7. 详解如何用AD 生成Gerber文件

    以上gerber文件就出完了;  下面步骤是:进行导出" 钻孔文件 ". 以上钻孔文件就出完了;  到此就全部完成输出了. 下面的操作,也可以不用导的 .下面步骤是:进行导出&qu ...

  8. webkit中DOM 事件有多少

    webkit中DOM 事件有多少 目前客户端javascript中大量的工作就是处理浏览器,用户触发的各种事件,下面是webkit中这些事件的集合,有一些时常见的,标准规定的,而另一些则是webkit ...

  9. Redhat 安装Oracle DBI和DBD

    Redhat 安装DBI和ORACLE DBD tar -zxvf DBI-1.616.tar.gz cd DBI-1.616 perl Makefile.PL make make install 2 ...

  10. ppi和dpi

    以下内容都是我自己总结的,如有不妥之处,请留言讨论,批评指正.万分感谢!ppi:可以用下面公式求得 对于手机屏幕来说,屏幕尺寸是固定的,分辨率一般是不可以调节的.所以ppi是一个定值.此值越高显示越细 ...