Android 7.1 默認自拍鏡像
近來收到客戶需求反饋需要將相機前攝成像默認為鏡像顯示,大致思路我們可以在保存數據前將前攝拍的照片轉為鏡像,保存數據是通過PhotoMode.java文件中的saveData方法實現,具體修改參照如下:
首先添加將圖片轉為鏡像顯示的方法,具體功能代碼參照如下:
/vendor/mediatek/proprietary/packages/apps/Camera2/common/src/com/mediatek/camera/common/utils/CameraUtil.java
+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, 0, true);
+ ByteArrayOutputStream baos = new ByteArrayOutputStream();
+ b.compress(Bitmap.CompressFormat.JPEG, 100, baos);
+ dest = baos.toByteArray();
+ b.recycle();
+
+ return dest;
+ }
其次我們在相機保存數據前將前攝拍的照片轉為鏡像,拍攝時使用的是前攝還是后攝可以通過CameraId來區分,CameraId值為0是后攝,CameraId值為1是前攝,具體修改參照如下:
/vendor/mediatek/proprietary/packages/apps/Camera2/common/src/com/mediatek/camera/common/mode/photo/PhotoMode.java
private void saveData(byte[] jpegData) {if (jpegData != null) {//check memory to decide whether it can take next picture.//if not, show savingISettingManager.SettingController controller = mISettingManager.getSettingController();String dngState = controller.queryValue(KEY_DNG);long saveDataSize = jpegData.length;
+ if(mCameraId.equals("1")){
+ jpegData = CameraUtil.mirrorJpegData(jpegData,0);
+ }if (dngState != null && "on".equalsIgnoreCase(dngState)) {saveDataSize = saveDataSize + DNG_IMAGE_SIZE;}
最后成像后在相機界面預覽的縮略圖我們也要做相應的鏡像處理,具體修改參照如下:
/vendor/mediatek/proprietary/packages/apps/Camera2/common/src/com/mediatek/camera/common/mode/photo/PhotoMode.java
private void updateThumbnail(byte[] jpegData) {Bitmap bitmap = BitmapCreator.createBitmapFromJpeg(jpegData, mIApp.getAppUi().getThumbnailViewWidth());
+ if(mCameraId.equals("1")){
+ bitmap = PhotoModeHelper.rotateAndMirror(bitmap, 0, true);
+ }mIApp.getAppUi().updateThumbnail(bitmap);}
重新編譯驗證,修改生效,已實現相機前攝成像默認為鏡像顯示