From 93eb3d5c2c67398e37a34690a24db47925670c34 Mon Sep 17 00:00:00 2001 From: Matthew Date: Sat, 21 Sep 2024 16:37:17 +0800 Subject: [PATCH] =?UTF-8?q?=E8=B0=83=E6=95=B4=E7=85=A7=E7=89=87=E6=96=B9?= =?UTF-8?q?=E5=90=91?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../java/com/xypower/mpapp/MicroPhotoService.java | 14 ++++++++++++++ .../java/com/xypower/mpapp/video/RawActivity.java | 13 +++++++++++++ 2 files changed, 27 insertions(+) diff --git a/app/src/main/java/com/xypower/mpapp/MicroPhotoService.java b/app/src/main/java/com/xypower/mpapp/MicroPhotoService.java index 442153f6..35ed17eb 100644 --- a/app/src/main/java/com/xypower/mpapp/MicroPhotoService.java +++ b/app/src/main/java/com/xypower/mpapp/MicroPhotoService.java @@ -16,6 +16,7 @@ import android.content.IntentFilter; import android.graphics.Bitmap; import android.graphics.BitmapFactory; import android.graphics.ImageDecoder; +import android.graphics.Matrix; import android.location.Location; import android.location.LocationListener; import android.location.LocationManager; @@ -401,6 +402,8 @@ public class MicroPhotoService extends Service { final boolean result = intent.getBooleanExtra("result", false); final String path = intent.getStringExtra("path"); final long videoId = intent.getLongExtra("videoId", 0); + final int orientation = intent.getIntExtra("orientation", 0); + final boolean frontCamera = intent.getBooleanExtra("frontCamera", false); Log.i(TAG, "Recording received(" + Long.toString(videoId) + "):" + path); if (photoOrVideo) { @@ -426,6 +429,17 @@ public class MicroPhotoService extends Service { } else { bm = BitmapFactory.decodeFile(path); } + + if (orientation != 0 || frontCamera) { + Matrix matrix = new Matrix(); + if (orientation != 0) { + matrix.postRotate(orientation); + } + if (frontCamera) { + matrix.postScale(-1, 1); + } + bm = Bitmap.createBitmap(bm, 0, 0, bm.getWidth(), bm.getHeight(), matrix, true); + } } catch (Exception ex) { } mService.captureFinished(mService.mNativeHandle, photoOrVideo, result && bm != null, bm, videoId); diff --git a/app/src/main/java/com/xypower/mpapp/video/RawActivity.java b/app/src/main/java/com/xypower/mpapp/video/RawActivity.java index 300e1d9b..343cad6a 100644 --- a/app/src/main/java/com/xypower/mpapp/video/RawActivity.java +++ b/app/src/main/java/com/xypower/mpapp/video/RawActivity.java @@ -271,6 +271,8 @@ public class RawActivity extends AppCompatActivity { private int mOrientation = -1; + private boolean mFrontCamera = false; + /** * A {@link CameraCaptureSession } for camera preview. */ @@ -660,6 +662,12 @@ public class RawActivity extends AppCompatActivity { int width = intent.getIntExtra("width", MAX_PREVIEW_WIDTH); int height = intent.getIntExtra("height", MAX_PREVIEW_HEIGHT); + if (mOrientation == 90 || mOrientation == 270) { + int tmp = width; + width = height; + height = width; + } + mImageSize = new Size(width, height); mPhotoId = intent.getLongExtra("videoId", 0); @@ -747,6 +755,8 @@ public class RawActivity extends AppCompatActivity { return false; } + mFrontCamera = characteristics.get(CameraCharacteristics.LENS_FACING) == CameraCharacteristics.LENS_FACING_FRONT; + StreamConfigurationMap map = characteristics.get( CameraCharacteristics.SCALER_STREAM_CONFIGURATION_MAP); @@ -1805,6 +1815,9 @@ public class RawActivity extends AppCompatActivity { // intent.setPackage(packageName); intent.putExtra("photoOrVideo", true); intent.putExtra("result", result); + intent.putExtra("orientation", mOrientation); + intent.putExtra("frontCamera", mFrontCamera); + if (!TextUtils.isEmpty(path)) { intent.putExtra("path", path); }