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

相关文章

Java 正则表达式URL 匹配与源码全解析

《Java正则表达式URL匹配与源码全解析》在Web应用开发中,我们经常需要对URL进行格式验证,今天我们结合Java的Pattern和Matcher类,深入理解正则表达式在实际应用中... 目录1.正则表达式分解:2. 添加域名匹配 (2)3. 添加路径和查询参数匹配 (3) 4. 最终优化版本5.设计思

Android Mainline基础简介

《AndroidMainline基础简介》AndroidMainline是通过模块化更新Android核心组件的框架,可能提高安全性,本文给大家介绍AndroidMainline基础简介,感兴趣的朋... 目录关键要点什么是 android Mainline?Android Mainline 的工作原理关键

如何解决idea的Module:‘:app‘platform‘android-32‘not found.问题

《如何解决idea的Module:‘:app‘platform‘android-32‘notfound.问题》:本文主要介绍如何解决idea的Module:‘:app‘platform‘andr... 目录idea的Module:‘:app‘pwww.chinasem.cnlatform‘android-32

Android实现打开本地pdf文件的两种方式

《Android实现打开本地pdf文件的两种方式》在现代应用中,PDF格式因其跨平台、稳定性好、展示内容一致等特点,在Android平台上,如何高效地打开本地PDF文件,不仅关系到用户体验,也直接影响... 目录一、项目概述二、相关知识2.1 PDF文件基本概述2.2 android 文件访问与存储权限2.

Android Studio 配置国内镜像源的实现步骤

《AndroidStudio配置国内镜像源的实现步骤》本文主要介绍了AndroidStudio配置国内镜像源的实现步骤,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,... 目录一、修改 hosts,解决 SDK 下载失败的问题二、修改 gradle 地址,解决 gradle

在Android平台上实现消息推送功能

《在Android平台上实现消息推送功能》随着移动互联网应用的飞速发展,消息推送已成为移动应用中不可或缺的功能,在Android平台上,实现消息推送涉及到服务端的消息发送、客户端的消息接收、通知渠道(... 目录一、项目概述二、相关知识介绍2.1 消息推送的基本原理2.2 Firebase Cloud Me

Java调用C++动态库超详细步骤讲解(附源码)

《Java调用C++动态库超详细步骤讲解(附源码)》C语言因其高效和接近硬件的特性,时常会被用在性能要求较高或者需要直接操作硬件的场合,:本文主要介绍Java调用C++动态库的相关资料,文中通过代... 目录一、直接调用C++库第一步:动态库生成(vs2017+qt5.12.10)第二步:Java调用C++

Docker镜像修改hosts及dockerfile修改hosts文件的实现方式

《Docker镜像修改hosts及dockerfile修改hosts文件的实现方式》:本文主要介绍Docker镜像修改hosts及dockerfile修改hosts文件的实现方式,具有很好的参考价... 目录docker镜像修改hosts及dockerfile修改hosts文件准备 dockerfile 文

Android中Dialog的使用详解

《Android中Dialog的使用详解》Dialog(对话框)是Android中常用的UI组件,用于临时显示重要信息或获取用户输入,本文给大家介绍Android中Dialog的使用,感兴趣的朋友一起... 目录android中Dialog的使用详解1. 基本Dialog类型1.1 AlertDialog(

Python实现无痛修改第三方库源码的方法详解

《Python实现无痛修改第三方库源码的方法详解》很多时候,我们下载的第三方库是不会有需求不满足的情况,但也有极少的情况,第三方库没有兼顾到需求,本文将介绍几个修改源码的操作,大家可以根据需求进行选择... 目录需求不符合模拟示例 1. 修改源文件2. 继承修改3. 猴子补丁4. 追踪局部变量需求不符合很