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

相关文章

SQL Server修改数据库名及物理数据文件名操作步骤

《SQLServer修改数据库名及物理数据文件名操作步骤》在SQLServer中重命名数据库是一个常见的操作,但需要确保用户具有足够的权限来执行此操作,:本文主要介绍SQLServer修改数据... 目录一、背景介绍二、操作步骤2.1 设置为单用户模式(断开连接)2.2 修改数据库名称2.3 查找逻辑文件名

Oracle修改端口号之后无法启动的解决方案

《Oracle修改端口号之后无法启动的解决方案》Oracle数据库更改端口后出现监听器无法启动的问题确实较为常见,但并非必然发生,这一问题通常源于​​配置错误或环境冲突​​,而非端口修改本身,以下是系... 目录一、问题根源分析​​​二、保姆级解决方案​​​​步骤1:修正监听器配置文件 (listener.

Linux中修改Apache HTTP Server(httpd)默认端口的完整指南

《Linux中修改ApacheHTTPServer(httpd)默认端口的完整指南》ApacheHTTPServer(简称httpd)是Linux系统中最常用的Web服务器之一,本文将详细介绍如何... 目录一、修改 httpd 默认端口的步骤1. 查找 httpd 配置文件路径2. 编辑配置文件3. 保存

Android学习总结之Java和kotlin区别超详细分析

《Android学习总结之Java和kotlin区别超详细分析》Java和Kotlin都是用于Android开发的编程语言,它们各自具有独特的特点和优势,:本文主要介绍Android学习总结之Ja... 目录一、空安全机制真题 1:Kotlin 如何解决 Java 的 NullPointerExceptio

8种快速易用的Python Matplotlib数据可视化方法汇总(附源码)

《8种快速易用的PythonMatplotlib数据可视化方法汇总(附源码)》你是否曾经面对一堆复杂的数据,却不知道如何让它们变得直观易懂?别慌,Python的Matplotlib库是你数据可视化的... 目录引言1. 折线图(Line Plot)——趋势分析2. 柱状图(Bar Chart)——对比分析3

Nginx 413修改上传文件大小限制的方法详解

《Nginx413修改上传文件大小限制的方法详解》在使用Nginx作为Web服务器时,有时会遇到客户端尝试上传大文件时返回​​413RequestEntityTooLarge​​... 目录1. 理解 ​​413 Request Entity Too Large​​ 错误2. 修改 Nginx 配置2.1

Python对PDF书签进行添加,修改提取和删除操作

《Python对PDF书签进行添加,修改提取和删除操作》PDF书签是PDF文件中的导航工具,通常包含一个标题和一个跳转位置,本教程将详细介绍如何使用Python对PDF文件中的书签进行操作... 目录简介使用工具python 向 PDF 添加书签添加书签添加嵌套书签Python 修改 PDF 书签Pytho

Docker安装MySQL镜像的详细步骤(适合新手小白)

《Docker安装MySQL镜像的详细步骤(适合新手小白)》本文详细介绍了如何在Ubuntu环境下使用Docker安装MySQL5.7版本,包括从官网拉取镜像、配置MySQL容器、设置权限及内网部署,... 目录前言安装1.访问docker镜像仓库官网2.找到对应的版本,复制右侧的命令即可3.查看镜像4.启

Android NDK版本迭代与FFmpeg交叉编译完全指南

《AndroidNDK版本迭代与FFmpeg交叉编译完全指南》在Android开发中,使用NDK进行原生代码开发是一项常见需求,特别是当我们需要集成FFmpeg这样的多媒体处理库时,本文将深入分析A... 目录一、android NDK版本迭代分界线二、FFmpeg交叉编译关键注意事项三、完整编译脚本示例四

Android与iOS设备MAC地址生成原理及Java实现详解

《Android与iOS设备MAC地址生成原理及Java实现详解》在无线网络通信中,MAC(MediaAccessControl)地址是设备的唯一网络标识符,本文主要介绍了Android与iOS设备M... 目录引言1. MAC地址基础1.1 MAC地址的组成1.2 MAC地址的分类2. android与I