Android 解决MTK相机前摄镜像问题
很莫名其妙的,前摄默认镜像,原来是为了前摄拍字体正确显示,比如自拍,前摄拍摄的人像虽左右镜像了,但如果后面有字牌显示,字体会显示正常而不是翻转。但现在需求是满足普遍的前摄原生代码不带镜像修改,需要把预览和保存的图片进行左右翻转,那么就需要找到相应的修改位置才行。
以下就是相关修改点:直接修复前摄镜像显示 即可正常显示
充分利用此方法:
PhotoModeHelper.rotateAndMirror(bitmap, orientation, true);
和
matrix.postScale(-1, 1);
1./vendor/mediatek/proprietary/packages/apps/Camera2/common/src/com/mediatek/camera/common/utils/CameraUtil.java
//*/add package
import android.graphics.BitmapFactory;
import com.mediatek.camera.common.mode.photo.PhotoModeHelper;
import java.io.ByteArrayOutputStream;
import android.graphics.Bitmap;
//*/
添加在最后的方法
//*/add sub camera mirror method mirrorJpegData
public static byte[] mirrorJpegData(byte[] jpegData, int orientation) {
byte[] dest = jpegData;
BitmapFactory.Options opts = new BitmapFactory.Options();
opts.inMutable = true;
Bitmap b = BitmapFactory.decodeByteArray(jpegData, 0, jpegData.length, opts);
b = PhotoModeHelper.rotateAndMirror(b, orientation, true);
ByteArrayOutputStream baos = new ByteArrayOutputStream();
b.compress(Bitmap.CompressFormat.JPEG, 100, baos);
dest = baos.toByteArray();
b.recycle();return dest;
}
//*/
2./vendor/mediatek/proprietary/packages/apps/Camera2/common/src/com/mediatek/camera/common/mode/photo/PhotoMode.java
@Override
public void onPostViewCallback(byte[] data) {
LogHelper.d(TAG, "[onPostViewCallback] data = " + data + ",mIsResumed = " + mIsResumed);
CameraSysTrace.onEventSystrace(POST_VIEW_CALLBACK, true, true);
if (data != null && mIsResumed) {
//will update the thumbnail
int rotation = CameraUtil.getJpegRotationFromDeviceSpec(Integer.parseInt(mCameraId),
mIApp.getGSensorOrientation(), mIApp.getActivity());
Bitmap bitmap = BitmapCreator.createBitmapFromYuv(data,
ThumbnailHelper.POST_VIEW_FORMAT,
ThumbnailHelper.getThumbnailWidth(),
ThumbnailHelper.getThumbnailHeight(),
mIApp.getAppUi().getThumbnailViewWidth(),
rotation);
//*/ add sub camera mirror
if (mCameraId.equals(FRONT_CAMERA_ID)) {//BACK_CAMERA_ID
Matrix m = new Matrix();
m.postScale(-1, 1);
bitmap = Bitmap.createBitmap(bitmap, 0, 0, bitmap.getWidth(), bitmap.getHeight(), m, true);
}
//*/
mIApp.getAppUi().updateThumbnail(bitmap);
}
CameraSysTrace.onEventSystrace(POST_VIEW_CALLBACK, false, true);
}===============
保存数据是通过PhotoMode.java文件中的saveData方法实现,具体修改参照如下:引用方法
private void saveData(byte[] data) {
if (data != null) {
//*/ add. sub camera mirror
if (mCameraId.equals(FRONT_CAMERA_ID)) {//BACK_CAMERA_ID
data = CameraUtil.mirrorJpegData(data, 0);
}
//*/
//check memory to decide whether it can take next picture.
//if not, show saving
ISettingManager.SettingController controller = mISettingManager.getSettingController();
String dngState = controller.queryValue(KEY_DNG);
long saveDataSize = data.length;
if (dngState != null && "on".equalsIgnoreCase(dngState)) {
saveDataSize = saveDataSize + DNG_IMAGE_SIZE;
}
synchronized (mCaptureNumberSync) {
mCapturingNumber ++;
mMemoryManager.checkOneShotMemoryAction(saveDataSize);
}
String fileDirectory = mICameraContext.getStorageService().getFileDirectory();
Size exifSize = CameraUtil.getSizeFromSdkExif(data);
ContentValues contentValues = mPhotoModeHelper.createContentValues(data,
fileDirectory, exifSize.getWidth(), exifSize.getHeight());
mICameraContext.getMediaSaver().addSaveRequest(data, contentValues, null,
mMediaSaverListener);
}
}
到此完结撒花!
相关文章:
Android 解决MTK相机前摄镜像问题
很莫名其妙的,前摄默认镜像,原来是为了前摄拍字体正确显示,比如自拍,前摄拍摄的人像虽左右镜像了,但如果后面有字牌显示,字体会显示正常而不是翻转。但现在需求是满足普遍的前摄原生代码不带镜像修改&#…...
在 Oracle 数据库中,SERVICE_NAME 和 SERVICE_NAMES 有什么区别?
在 Oracle 数据库中,SERVICE_NAME 和 SERVICE_NAMES 是两个相关的但略有不同的概念。它们都用于标识数据库服务,但使用场景和作用有所不同。下面详细解释这两个概念的区别: SERVICE_NAME 1. 定义: SERVICE_NAME 是一个单一的、…...
【Maven】——基础入门,插件安装、配置和简单使用,Maven如何设置国内源
阿华代码,不是逆风,就是我疯 你们的点赞收藏是我前进最大的动力!! 希望本文内容能够帮助到你!! 目录 引入: 一:Maven插件的安装 1:环境准备 2:创建项目 二…...
AIGC时代LaTeX排版的应用、技巧与未来展望
文章目录 一、LaTeX简介与基础设置二、常用特殊符号与公式排版三、图片与表格的插入与排版四、自动编号与交叉引用五、自定义命令与样式六、LaTeX在AIGC时代的应用与挑战七、LaTeX的未来展望《LaTeX 入门实战》内容简介作者简介目录前言/序言读者对象本书内容充分利用本书 在AI…...
二叉树的深搜
前言: 本章节更深入学习递归 计算布尔二叉树的值 思路: 1.函数头设计:dfs(root) 2.函数体:需要一个接收left 和 right 的值 并且根据root的值进行比较 3.递归出口:很明显 当为叶子节点的时候…...
JUC笔记之ReentrantLock
ReentrantLock 相对于synchronized它具备如下特点 可中断 可以设置超时时间 可以设置为公平锁 支持多个条件变量(多个wait set,不同于synchronized的wait set,ReentrantLock的wait set在同一条件下notify才能唤醒WATING状态的线程) 与synchronized一样,都支持可重入 …...
【含文档】基于ssm+jsp的图书管理系统(含源码+数据库+lw)
1.开发环境 开发系统:Windows10/11 架构模式:MVC/前后端分离 JDK版本: Java JDK1.8 开发工具:IDEA 数据库版本: mysql5.7或8.0 数据库可视化工具: navicat 服务器: apache tomcat 主要技术: Java,Spring,SpringMvc,mybatis,mysql,vue 2.视频演示地址 3.功能 系统定义了两个…...
pytorch知识蒸馏测试
import torch from torch import nn,optim import torch.utils import torch.utils.data import torch.utils.data.dataloader from torchvision import transforms,datasets...
mutable用法
mutable 关键字用于允许类的某个成员变量在 const 成员函数中被修改。通常,const 成员函数不能改变对象的任何成员变量,但将成员变量声明为 mutable 可以例外 class Hero { public:Hero():m_Hp(0), m_getHpCounter(0){}int getHp() const {m_getHpCounte…...
SQL语言基础
SQL(Struct Query Language)是结构化查询语言的简称,是一种在关系型数据库中定义和操纵数据的标准语言。 不要使用面向对象的思想学习SQL,因为它不是面向对象的语言目标 SQL语言简介(了解)从数据库数据检索数据(重点)子查询(重点)Oracle常用函数(掌握) …...
在USB电源测试中如何降低测试成本?-纳米软件
USB 电源模块在现代电子设备中广泛应用,其性能的稳定性和可靠性至关重要。然而,测试 USB 电源模块的成本可能会很高,这对于企业和研发机构来说是一个重要的问题。因此,寻找降低 USB 电源模块测试成本的方法具有重要的现实意义。 降…...
springboot - 定时任务
定时任务是企业级应用中的常见操作 定时任务是企业级开发中必不可少的组成部分,诸如长周期业务数据的计算,例如年度报表,诸如系统脏数据的处理,再比如系统性能监控报告,还有抢购类活动的商品上架,这些都离不…...
一篇文章理解CSS垂直布局方法
方法1:align-content: center 在 2024 年的 CSS 原生属性中允许使用 1 个 CSS 属性 align-content: center进行垂直居中。 <!DOCTYPE html> <html lang"en"><head><meta charset"UTF-8" /><meta name"viewpo…...
SpringBoot day 1105
ok了家人们,今天继续学习spring boot,let‘s go 六.SpringBoot实现SSM整合 6.1 创建工程,导入静态资源 <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><title>Title</…...
MySQL 完整教程:从入门到精通
MySQL 完整教程:从入门到精通 MySQL 是一个广泛使用的关系型数据库管理系统,它使用结构化查询语言 (SQL) 来管理和操作数据。本文将详细介绍 MySQL 的基本概念、安装与配置、常用 SQL 语法、数据表的创建与管理、索引、视图、存储过程、触发器等高级特性…...
【贝叶斯公式】贝叶斯公式、贝叶斯定理、贝叶斯因子,似然比
一、是什么? 贝叶斯公式的本质在于它提供了一种在已有知识的基础上更新和调整我们对事件的信念的方式。具体来说,贝叶斯公式描述了后验概率(即在观察到某些证据后更新的概率)与先验概率(即在没有观察证据之前的概率&a…...
[libos源码学习 1] Liboc协程生产者消费者举例
文章目录 1. CoRoutineEnv_t结构体用于管理协程环境 3 Liboc协程生产者消费者例子4 Liboc协程生产者消费者, 为什么队列不需要上锁?5. 两个协程访问资源不需要加队列吗5. 参考 1. CoRoutineEnv_t结构体用于管理协程环境 struct stCoRoutineEnv_t { stCo…...
Python OpenCV 图像改变
更改图像数据 通过 改像素点 或者 切片的区域 import cv2 import numpy as np img cv2.imread("image.jpg") print(img[3,5]) # 显示某位置(行3列5)的像素值( 如 [53 34 29] 它是有三通道 B G R 组成) img[3,5] (0,0,255) # 更改该位置的像素…...
k8s按需创建 PV和创建与使用 PVC
在 Kubernetes 中,PersistentVolume(PV)和 PersistentVolumeClaim(PVC)用于管理存储资源。PV 是集群中的存储资源,而 PVC 是 Pod 请求 PV 的方式。按需创建 PV 通常使用 StorageClass 实现动态存储分配&…...
揭秘云计算 | 2、业务需求推动IT发展
揭秘云计算 | 1、云从哪里来?-CSDN博客https://blog.csdn.net/Ultipa/article/details/143430941?spm1001.2014.3001.5502 书接上文: 过去几十年间IT行业从大型主机过渡到客户端/服务器,再过渡到现如今的万物互联,IT可把控的资…...
ES6从入门到精通:前言
ES6简介 ES6(ECMAScript 2015)是JavaScript语言的重大更新,引入了许多新特性,包括语法糖、新数据类型、模块化支持等,显著提升了开发效率和代码可维护性。 核心知识点概览 变量声明 let 和 const 取代 var…...
大型活动交通拥堵治理的视觉算法应用
大型活动下智慧交通的视觉分析应用 一、背景与挑战 大型活动(如演唱会、马拉松赛事、高考中考等)期间,城市交通面临瞬时人流车流激增、传统摄像头模糊、交通拥堵识别滞后等问题。以演唱会为例,暖城商圈曾因观众集中离场导致周边…...
Cilium动手实验室: 精通之旅---20.Isovalent Enterprise for Cilium: Zero Trust Visibility
Cilium动手实验室: 精通之旅---20.Isovalent Enterprise for Cilium: Zero Trust Visibility 1. 实验室环境1.1 实验室环境1.2 小测试 2. The Endor System2.1 部署应用2.2 检查现有策略 3. Cilium 策略实体3.1 创建 allow-all 网络策略3.2 在 Hubble CLI 中验证网络策略源3.3 …...
最新SpringBoot+SpringCloud+Nacos微服务框架分享
文章目录 前言一、服务规划二、架构核心1.cloud的pom2.gateway的异常handler3.gateway的filter4、admin的pom5、admin的登录核心 三、code-helper分享总结 前言 最近有个活蛮赶的,根据Excel列的需求预估的工时直接打骨折,不要问我为什么,主要…...
Mac软件卸载指南,简单易懂!
刚和Adobe分手,它却总在Library里给你写"回忆录"?卸载的Final Cut Pro像电子幽灵般阴魂不散?总是会有残留文件,别慌!这份Mac软件卸载指南,将用最硬核的方式教你"数字分手术"࿰…...
Java 加密常用的各种算法及其选择
在数字化时代,数据安全至关重要,Java 作为广泛应用的编程语言,提供了丰富的加密算法来保障数据的保密性、完整性和真实性。了解这些常用加密算法及其适用场景,有助于开发者在不同的业务需求中做出正确的选择。 一、对称加密算法…...
2025盘古石杯决赛【手机取证】
前言 第三届盘古石杯国际电子数据取证大赛决赛 最后一题没有解出来,实在找不到,希望有大佬教一下我。 还有就会议时间,我感觉不是图片时间,因为在电脑看到是其他时间用老会议系统开的会。 手机取证 1、分析鸿蒙手机检材&#x…...
微信小程序云开发平台MySQL的连接方式
注:微信小程序云开发平台指的是腾讯云开发 先给结论:微信小程序云开发平台的MySQL,无法通过获取数据库连接信息的方式进行连接,连接只能通过云开发的SDK连接,具体要参考官方文档: 为什么? 因为…...
【无标题】路径问题的革命性重构:基于二维拓扑收缩色动力学模型的零点隧穿理论
路径问题的革命性重构:基于二维拓扑收缩色动力学模型的零点隧穿理论 一、传统路径模型的根本缺陷 在经典正方形路径问题中(图1): mermaid graph LR A((A)) --- B((B)) B --- C((C)) C --- D((D)) D --- A A -.- C[无直接路径] B -…...
C++课设:简易日历程序(支持传统节假日 + 二十四节气 + 个人纪念日管理)
名人说:路漫漫其修远兮,吾将上下而求索。—— 屈原《离骚》 创作者:Code_流苏(CSDN)(一个喜欢古诗词和编程的Coder😊) 专栏介绍:《编程项目实战》 目录 一、为什么要开发一个日历程序?1. 深入理解时间算法2. 练习面向对象设计3. 学习数据结构应用二、核心算法深度解析…...
