MTK Camera2 前置镜头镜像调整

Android默认前置镜头拍照的逻辑是镜像的,但有些时候的需求是不需要镜像。就需要在Camera2应用内对其进行调整。

下面的内容也是学习别人的写法,在Android11的平台实际试验过,应该是可行的。

diff --git a/common/src/com/mediatek/camera/common/mode/photo/PhotoMode.java b/common/src/com/mediatek/camera/common/mode/photo/PhotoMode.java
index 24fdc22..a1d8464 100755
--- a/common/src/com/mediatek/camera/common/mode/photo/PhotoMode.java
+++ b/common/src/com/mediatek/camera/common/mode/photo/PhotoMode.java
@@ -519,6 +519,9 @@ public class PhotoMode extends CameraModeBase implements CaptureDataCallback,
 
 
     private void saveData(byte[] data) {
+        if (mCameraId.equals("0")) {
+            data = CameraUtil.mirrorJpegData(data, 0);
+        }
         if (data != null) {
             //check memory to decide whether it can take next picture.
             //if not, show saving

这里的cameraId是不同的摄像头对应的ID,一般情况下前摄的ID应该是1,但是我的项目是0。对前摄执行镜像图片数据镜像的操作。

diff --git a/common/src/com/mediatek/camera/common/utils/CameraUtil.java b/common/src/com/mediatek/camera/common/utils/CameraUtil.java
index 425e033..9023617 100755
--- a/common/src/com/mediatek/camera/common/utils/CameraUtil.java
+++ b/common/src/com/mediatek/camera/common/utils/CameraUtil.java
@@ -52,6 +52,8 @@ import android.content.pm.PackageInfo;
 import android.content.pm.PackageManager;
 import android.content.res.Resources;
 import android.database.Cursor;
+import android.graphics.Bitmap;
+import android.graphics.BitmapFactory;
 import android.graphics.ImageFormat;
 import android.graphics.Matrix;
 import android.graphics.PixelFormat;
@@ -94,11 +96,13 @@ import com.mediatek.camera.common.loader.DeviceDescription;
 import com.mediatek.camera.common.loader.DeviceSpec;
 import com.mediatek.camera.common.loader.FeatureLoader;
 import com.mediatek.camera.common.mode.CameraApiHelper;
+import com.mediatek.camera.common.mode.photo.PhotoModeHelper;
 import com.mediatek.camera.common.widget.Rotatable;
 import com.mediatek.camera.portability.SystemProperties;
 import com.mediatek.camera.portability.WifiDisplayStatusEx;
 
 import java.io.ByteArrayInputStream;
+import java.io.ByteArrayOutputStream;
 import java.io.IOException;
 import java.lang.reflect.InvocationTargetException;
 import java.lang.reflect.Method;
@@ -1883,4 +1887,19 @@ public final class CameraUtil {
         }
         return cameraCharatics;
     }
+
+    public static byte[] mirrorJpegData(byte[] jpegData, int orientation) {
+        LogHelper.i(TAG, "mirrorJpegData");
+        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, 0, true);
+        ByteArrayOutputStream baos = new ByteArrayOutputStream();
+        b.compress(Bitmap.CompressFormat.JPEG, 100, baos);
+        dest = baos.toByteArray();
+        b.recycle();
+
+        return dest;
+    }
 }

对于预览图也要执行镜像操作,不过这个有现成的函数,比较简单。

diff --git a/host/src/com/mediatek/camera/ui/ThumbnailViewManager.java b/host/src/com/mediatek/camera/ui/ThumbnailViewManager.java
index e63d507..31d88a2 100755
--- a/host/src/com/mediatek/camera/ui/ThumbnailViewManager.java
+++ b/host/src/com/mediatek/camera/ui/ThumbnailViewManager.java
@@ -61,6 +61,7 @@ import com.mediatek.camera.common.IAppUiListener.OnThumbnailClickedListener;
 import com.mediatek.camera.common.app.IApp;
 import com.mediatek.camera.common.debug.LogHelper;
 import com.mediatek.camera.common.debug.LogUtil.Tag;
+import com.mediatek.camera.common.mode.photo.PhotoModeHelper;
 import com.mediatek.camera.common.utils.BitmapCreator;
 import com.mediatek.camera.common.widget.RotateImageView;
 import com.mediatek.camera.portability.storage.StorageManagerExt;
@@ -186,6 +187,7 @@ class ThumbnailViewManager extends AbstractViewManager {
      *            orientation, content. suggest thumbnail view size.
      */
     public void updateThumbnail(Bitmap bitmap) {
+        bitmap = PhotoModeHelper.rotateAndMirror(bitmap, 0, true);
         updateThumbnailView(bitmap);
         if (bitmap != null) {
             doAnimation(mAnimationView);

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值