android 前摄镜像的源码修改

2024-03-26 18:58

本文主要是介绍android 前摄镜像的源码修改,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

最近遇到一个客户需求,要求在前摄的时候,不要求镜像预览,拍出来的照片也不要求镜像。

科谱一下,前摄镜像的原因是让镜头对着自己,当镜子使用,是专门这么设计的。

既然客户有要求,那就得修改了。

通过各种渠道找,之前想通过驱动层修改代码, 但是驱动同事告诉我,预览可以修改,拍出来的照片修改不了。

拍出来 的照片只能是在应用层修改,那就只能在AP侧找源码。

此代码是基于高通的基础之上的,android 7.1平台。

packages\apps\SnapdragonCamera\src\com\android\camera\PhotoModule.java

private void setFlipValue() {// Read Flip mode from adb command//value: 0(default) - FLIP_MODE_OFF//value: 1 - FLIP_MODE_H//value: 2 - FLIP_MODE_V//value: 3 - FLIP_MODE_VHint preview_flip_value = SystemProperties.getInt("debug.camera.preview.flip", 0);int video_flip_value = SystemProperties.getInt("debug.camera.video.flip", 0);int picture_flip_value = SystemProperties.getInt("debug.camera.picture.flip", 0);int rotation = CameraUtil.getJpegRotation(mCameraId, mOrientation);mParameters.setRotation(rotation);if (rotation == 90 || rotation == 270) {// in case of 90 or 270 degree, V/H flip should reverseif (preview_flip_value == 1) {preview_flip_value = 2;} else if (preview_flip_value == 2) {preview_flip_value = 1;}if (video_flip_value == 1) {video_flip_value = 2;} else if (video_flip_value == 2) {video_flip_value = 1;}if (picture_flip_value == 1) {picture_flip_value = 2;} else if (picture_flip_value == 2) {picture_flip_value = 1;}}String preview_flip = CameraUtil.getFilpModeString(preview_flip_value);String video_flip = CameraUtil.getFilpModeString(video_flip_value);String picture_flip = CameraUtil.getFilpModeString(picture_flip_value);if(CameraUtil.isSupported(preview_flip, CameraSettings.getSupportedFlipMode(mParameters))){mParameters.set(CameraSettings.KEY_QC_PREVIEW_FLIP, preview_flip);}if(CameraUtil.isSupported(video_flip, CameraSettings.getSupportedFlipMode(mParameters))){mParameters.set(CameraSettings.KEY_QC_VIDEO_FLIP, video_flip);}if(CameraUtil.isSupported(picture_flip, CameraSettings.getSupportedFlipMode(mParameters))){mParameters.set(CameraSettings.KEY_QC_SNAPSHOT_PICTURE_FLIP, picture_flip);}}

找到这个函数,

添加log,

private void setFlipValue() {// Read Flip mode from adb command//value: 0(default) - FLIP_MODE_OFF//value: 1 - FLIP_MODE_H//value: 2 - FLIP_MODE_V//value: 3 - FLIP_MODE_VHint preview_flip_value = SystemProperties.getInt("debug.camera.preview.flip", 0);int video_flip_value = SystemProperties.getInt("debug.camera.video.flip", 0);int picture_flip_value = SystemProperties.getInt("debug.camera.picture.flip", 0);int rotation = CameraUtil.getJpegRotation(mCameraId, mOrientation);Log.d("leo","preview_flip_value-->"+preview_flip_value);Log.d("leo","video_flip_value-->"+video_flip_value);Log.d("leo","picture_flip_value-->"+picture_flip_value);Log.d("leo","rotation-->"+rotation);Log.d("leo","mCameraId-->"+mCameraId);Log.d("leo","mOrientation-->"+mOrientation);mParameters.setRotation(rotation);if (rotation == 90 || rotation == 270) {// in case of 90 or 270 degree, V/H flip should reverseif (preview_flip_value == 1) {preview_flip_value = 2;} else if (preview_flip_value == 2) {preview_flip_value = 1;}if (video_flip_value == 1) {video_flip_value = 2;} else if (video_flip_value == 2) {video_flip_value = 1;}if (picture_flip_value == 1) {picture_flip_value = 2;} else if (picture_flip_value == 2) {picture_flip_value = 1;}}String preview_flip = CameraUtil.getFilpModeString(preview_flip_value);String video_flip = CameraUtil.getFilpModeString(video_flip_value);String picture_flip = CameraUtil.getFilpModeString(picture_flip_value);Log.d("leo","preview_flip-->"+preview_flip);Log.d("leo","video_flip-->"+video_flip);Log.d("leo","picture_flip-->"+picture_flip);if(CameraUtil.isSupported(preview_flip, CameraSettings.getSupportedFlipMode(mParameters))){mParameters.set(CameraSettings.KEY_QC_PREVIEW_FLIP, preview_flip);}if(CameraUtil.isSupported(video_flip, CameraSettings.getSupportedFlipMode(mParameters))){mParameters.set(CameraSettings.KEY_QC_VIDEO_FLIP, video_flip);}if(CameraUtil.isSupported(picture_flip, CameraSettings.getSupportedFlipMode(mParameters))){mParameters.set(CameraSettings.KEY_QC_SNAPSHOT_PICTURE_FLIP, picture_flip);}}
在代码的这个地方,
mParameters.set
设置相机的属性时,会有一个flip属性,这个属性就可以设置拍出来的照片是否镜像,v方向还是h方向镜像。
如果需要修改,可以参考以下:

private void setFlipValue() {// Read Flip mode from adb command//value: 0(default) - FLIP_MODE_OFF//value: 1 - FLIP_MODE_H//value: 2 - FLIP_MODE_V//value: 3 - FLIP_MODE_VHint preview_flip_value = SystemProperties.getInt("debug.camera.preview.flip", 0);int video_flip_value = SystemProperties.getInt("debug.camera.video.flip", 0);int picture_flip_value = SystemProperties.getInt("debug.camera.picture.flip", 0);int rotation = CameraUtil.getJpegRotation(mCameraId, mOrientation);Log.d("leo","preview_flip_value-->"+preview_flip_value);Log.d("leo","video_flip_value-->"+video_flip_value);Log.d("leo","picture_flip_value-->"+picture_flip_value);Log.d("leo","rotation-->"+rotation);Log.d("leo","mCameraId-->"+mCameraId);Log.d("leo","mOrientation-->"+mOrientation);
// 在这个地方添加对cameraiId的判断,也就是你想镜像哪一个camera,就判断一个id就可以了,
// 对filp的修改也是根据你的需要来修改的,我这里只需要修改拍照后的镜像,那就修改picture_flip_value
if(2 == mCameraId){picture_flip_value = 2;}mParameters.setRotation(rotation);if (rotation == 90 || rotation == 270) {// in case of 90 or 270 degree, V/H flip should reverseif (preview_flip_value == 1) {preview_flip_value = 2;} else if (preview_flip_value == 2) {preview_flip_value = 1;}if (video_flip_value == 1) {video_flip_value = 2;} else if (video_flip_value == 2) {video_flip_value = 1;}if (picture_flip_value == 1) {picture_flip_value = 2;} else if (picture_flip_value == 2) {picture_flip_value = 1;}}String preview_flip = CameraUtil.getFilpModeString(preview_flip_value);String video_flip = CameraUtil.getFilpModeString(video_flip_value);String picture_flip = CameraUtil.getFilpModeString(picture_flip_value);Log.d("leo","preview_flip-->"+preview_flip);Log.d("leo","video_flip-->"+video_flip);Log.d("leo","picture_flip-->"+picture_flip);if(CameraUtil.isSupported(preview_flip, CameraSettings.getSupportedFlipMode(mParameters))){mParameters.set(CameraSettings.KEY_QC_PREVIEW_FLIP, preview_flip);}if(CameraUtil.isSupported(video_flip, CameraSettings.getSupportedFlipMode(mParameters))){mParameters.set(CameraSettings.KEY_QC_VIDEO_FLIP, video_flip);}if(CameraUtil.isSupported(picture_flip, CameraSettings.getSupportedFlipMode(mParameters))){mParameters.set(CameraSettings.KEY_QC_SNAPSHOT_PICTURE_FLIP, picture_flip);}}
亲测有效哦,实际拍出来的效果我就不上图了,请gongchengshi们自己动手试试吧。






这篇关于android 前摄镜像的源码修改的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/849535

相关文章

Python使用国内镜像加速pip安装的方法讲解

《Python使用国内镜像加速pip安装的方法讲解》在Python开发中,pip是一个非常重要的工具,用于安装和管理Python的第三方库,然而,在国内使用pip安装依赖时,往往会因为网络问题而导致速... 目录一、pip 工具简介1. 什么是 pip?2. 什么是 -i 参数?二、国内镜像源的选择三、如何

Android 悬浮窗开发示例((动态权限请求 | 前台服务和通知 | 悬浮窗创建 )

《Android悬浮窗开发示例((动态权限请求|前台服务和通知|悬浮窗创建)》本文介绍了Android悬浮窗的实现效果,包括动态权限请求、前台服务和通知的使用,悬浮窗权限需要动态申请并引导... 目录一、悬浮窗 动态权限请求1、动态请求权限2、悬浮窗权限说明3、检查动态权限4、申请动态权限5、权限设置完毕后

Android里面的Service种类以及启动方式

《Android里面的Service种类以及启动方式》Android中的Service分为前台服务和后台服务,前台服务需要亮身份牌并显示通知,后台服务则有启动方式选择,包括startService和b... 目录一句话总结:一、Service 的两种类型:1. 前台服务(必须亮身份牌)2. 后台服务(偷偷干

docker如何删除悬空镜像

《docker如何删除悬空镜像》文章介绍了如何使用Docker命令删除悬空镜像,以提高服务器空间利用率,通过使用dockerimage命令结合filter和awk工具,可以过滤出没有Tag的镜像,并将... 目录docChina编程ker删除悬空镜像前言悬空镜像docker官方提供的方式自定义方式总结docker

修改若依框架Token的过期时间问题

《修改若依框架Token的过期时间问题》本文介绍了如何修改若依框架中Token的过期时间,通过修改`application.yml`文件中的配置来实现,默认单位为分钟,希望此经验对大家有所帮助,也欢迎... 目录修改若依框架Token的过期时间修改Token的过期时间关闭Token的过期时js间总结修改若依

MySQL修改密码的四种实现方式

《MySQL修改密码的四种实现方式》文章主要介绍了如何使用命令行工具修改MySQL密码,包括使用`setpassword`命令和`mysqladmin`命令,此外,还详细描述了忘记密码时的处理方法,包... 目录mysql修改密码四种方式一、set password命令二、使用mysqladmin三、修改u

使用Python在Excel中插入、修改、提取和删除超链接

《使用Python在Excel中插入、修改、提取和删除超链接》超链接是Excel中的常用功能,通过点击超链接可以快速跳转到外部网站、本地文件或工作表中的特定单元格,有效提升数据访问的效率和用户体验,这... 目录引言使用工具python在Excel中插入超链接Python修改Excel中的超链接Python

Android kotlin语言实现删除文件的解决方案

《Androidkotlin语言实现删除文件的解决方案》:本文主要介绍Androidkotlin语言实现删除文件的解决方案,在项目开发过程中,尤其是需要跨平台协作的项目,那么删除用户指定的文件的... 目录一、前言二、适用环境三、模板内容1.权限申请2.Activity中的模板一、前言在项目开发过程中,尤

Go中sync.Once源码的深度讲解

《Go中sync.Once源码的深度讲解》sync.Once是Go语言标准库中的一个同步原语,用于确保某个操作只执行一次,本文将从源码出发为大家详细介绍一下sync.Once的具体使用,x希望对大家有... 目录概念简单示例源码解读总结概念sync.Once是Go语言标准库中的一个同步原语,用于确保某个操

python修改字符串值的三种方法

《python修改字符串值的三种方法》本文主要介绍了python修改字符串值的三种方法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学... 目录第一种方法:第二种方法:第三种方法:在python中,字符串对象是不可变类型,所以我们没办法直接