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



4039

被折叠的 条评论
为什么被折叠?



