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);

}

}

到此完结撒花!

相关推荐
AAAAA924018 小时前
物联网蜂窝模组:赋能口袋高清手持相机的实时互联与智能拍摄革新
数码相机·物联网·5g
三维频道18 小时前
从物理断裂到数字孪生:三维 DIC 如何重构汽车轻量化的“成形边界”?
人工智能·数码相机·dic技术与数字孪生·成形极限flc测定·汽车轻量化制造·cae冲压仿真闭环·高强钢与复合材料
大江东去浪淘尽千古风流人物1 天前
【cuVSLAM】GPU 加速、多相机、实时视觉/视觉惯性 SLAM设计优势
c++·人工智能·数码相机·ubuntu·计算机视觉·augmented reality
格林威2 天前
工业相机“心跳”监测脚本(C# 版) 支持海康 / Basler / 堡盟工业相机
开发语言·人工智能·数码相机·opencv·计算机视觉·c#·视觉检测
轻口味2 天前
HarmonyOS 6 轻相机应用开发1:功能介绍与框架搭建
数码相机·华为·harmonyos
Huangxy__2 天前
java相机手搓(后续是文件保存以及接入大模型)
java·开发语言·数码相机
格林威2 天前
如何用 eBPF 监控 GigE Vision 相机网络性能
网络·人工智能·数码相机·yolo·计算机视觉·视觉检测·工业相机
nashane2 天前
HarmonyOS 6学习:相机预览画面拉伸全解析——告别变形,打造完美相机预览体验
数码相机·harmonyos 5
格林威3 天前
AI视觉检测:Jetson Orin vs RTX A2000 推理速度对比
人工智能·数码相机·机器学习·计算机视觉·视觉检测·机器视觉·工业相机
qq_12084093713 天前
Three.js 大场景分块加载实战:从全量渲染到可视集调度
开发语言·javascript·数码相机