Android亮度自动调节

news/2024/12/29 14:45:17/

最近在做人脸识别项目。在抓取人脸时,发现了很多问题。其中旋转角度和光线问题最令人抓狂。

Camera拍摄照片可能存在0度/90度/180度/270度的(右侧)旋转,不同设备不同。例如,小米3w,0度;小米8,270度。所以需要获取照片后不能立即使用,需要根据旋转角度,对照片进行处理,以方便人脸位置的获取。关于如何实现,是另一话题,改天再论。

光线问题,其实是非常感官的因素。同样的处理代码,同样的画面,光线是否充足,影响抓取结果。

尝试了三个方案,仅有最终的光线传感器奏效。现将成功和不成功的方案都记录下来。

(1)方案一(失败):Camera接口

起初,对于Camer接口一通查找,发现曝光补偿和白平衡带有auto设置,调试后发现,不起作用。

(2)方案二(失败):屏幕亮度

后将焦点放在屏幕的亮度调节上,通过设置SCREEN_BRIGHTNESS_MODE_AUTOMATIC,达到自动调节屏幕亮度的效果。调试后,仍无效。测试代码,如下

    public static boolean autoBrightness(Context activity, boolean flag) {int value = 0;if (flag) {value = Settings.System.SCREEN_BRIGHTNESS_MODE_AUTOMATIC;} else {value = Settings.System.SCREEN_BRIGHTNESS_MODE_MANUAL;}return Settings.System.putInt(activity.getContentResolver(),Settings.System.SCREEN_BRIGHTNESS_MODE,value);}

(3)方案三(成功):光线传感器

最后才发现,其实真正起作用的是光线传感器。

下方为编写的适配器demo

package com.breakloop.common;import android.content.Context;
import android.hardware.Sensor;
import android.hardware.SensorEvent;
import android.hardware.SensorEventListener;
import android.hardware.SensorManager;
import android.view.Window;
import android.view.WindowManager;import static android.content.Context.SENSOR_SERVICE;public class BrightnessAdapter implements SensorEventListener {private Context mContext;private SensorManager sensorManager;private Window mWindow;public BrightnessAdapter(Context fContext, Window fWindow) {this.mContext = fContext;this.mWindow=fWindow;this.sensorManager=(SensorManager)mContext.getSystemService(SENSOR_SERVICE);}public void regist(){if(sensorManager!=null){sensorManager.registerListener(this,sensorManager.getDefaultSensor(Sensor.TYPE_LIGHT),SensorManager.SENSOR_DELAY_GAME);}}public void unRegist(){if(sensorManager!=null){sensorManager.unregisterListener(this,sensorManager.getDefaultSensor(Sensor.TYPE_LIGHT));}}@Overridepublic void onSensorChanged(SensorEvent event) {float[] values = event.values;//传感器类型int sensorType = event.sensor.getType();switch (sensorType){case Sensor.TYPE_LIGHT://获取窗口管理属性WindowManager.LayoutParams lp =mWindow.getAttributes();//计算屏幕亮度lp.screenBrightness = Float.valueOf(values[0])*(1f/255f);//参数设置mWindow.setAttributes(lp);break;default:break;}}@Overridepublic void onAccuracyChanged(Sensor sensor, int accuracy) {}
}

调用时,仅需要创建对象,并在Activity中适时registor和unregistor即可。


http://www.ppmy.cn/news/451215.html

相关文章

自动调节安卓亮度

转自吴小龙公众号 下拉状态栏有个亮度的进度条,如果开启了亮度自动调节开关,会随着周围光线变化,这个进度条也会随着变化,接下来就是看看这个功能是如何实现的。 源码版本 基于 Android 9.0 分析。 BrightnessDialog&#xff…

android自动调节屏幕亮度自动调节流程解析

屏幕亮度自动调节: 主要是从Sensor分析之中分离出来分析LIGHT 光线感应器,因此就分析一下自动调节屏幕亮度(手机随着光线的强度自我调节,也就是在亮的光线下屏幕自动调亮一些,暗的时候就自动调暗一些,省得…

Android11 亮度自动调节

关键代码在frameworks/base/services/core/java/com/android/server/display BrightnessMappingStrategy.java AutomaticBrightnessController.java DisplayPowerController.java 这三个 AutomaticBrightnessController.java private void updateAutoBrightness(boolean se…

Win10关闭自动调节亮度

Win10关闭自动调节亮度问题 最近自己的笔记本电脑屏幕亮度总是自动调节,尤其是打开比较暗的应用,屏幕亮度也随之变暗了,让人很难受。解决方法如下 方法 看了很多解决方法。大致有这几种。 简单粗暴:拔了电源线再插上&#xff…

Win10关闭自动调节亮度问题

Win10关闭自动调节亮度问题 笔记本总是有个亮度自动调节,打开较暗的页面后就会慢慢地自动变暗,眼睛很难受。不知道是第多少次忍不住上网查这个问题了,最终用下面的最后一个方法成功解决。心情瞬间舒畅! 方法 看了很多解决方法。…

亮度调节之自动调节

参考 https://blog.csdn.net/FightFightFight/article/details/83626332 自动调节和手动调节的分叉口在DisplayPowerController中的updatePowerState()方法处,这里先对自动调节控制器进行配置,然后若处于自动调节模式,那brightness就从自动调…

2306d的闭包问题

原文 首先,D的闭包是个好主意.我使用了C的成员函数指针;它们在语法上很糟糕,但概念很好,而闭包更好. D的闭包有些问题,有些是明显错误,有些是不应该不在语言中的改进. 不能调用某些闭包 这很奇怪,但这是真的. 一个问题是常和不变目前没有扩展到闭包环境.要求常和不变的传递性…

Qt 每月收支计算

Qt 每月收支计算,针对每月有支出(房贷、车贷、花呗、借呗)的情况,计算收支明细,直观看到未来的个人经济情况,培养良好的消费习惯,进行理性的财富支配,量入为出。 #include "mai…