android 7.1 高通平台 照片预览界面角度和镜像问题

前言

此篇博客只为记录照片预览界面图片旋转90,180,270,镜像等问题的修改位置和方式
5.1平台改过,后面忘记了;7.1平台上又碰到了,又得从新撸代码定位、解决问题
特此记录,方便后面碰到相似问题,避免重复撸代码

修改方法

diff --git a/LINUX/android/packages/apps/SnapdragonCamera/src/com/android/camera/PhotoModule.java b/LINUX/android/packages/apps/SnapdragonCamera/src/com/android/camera/PhotoModule.java
index ed1ce936a1..2433022ddf 100755
--- a/LINUX/android/packages/apps/SnapdragonCamera/src/com/android/camera/PhotoModule.java
+++ b/LINUX/android/packages/apps/SnapdragonCamera/src/com/android/camera/PhotoModule.java
@@ -26,6 +26,8 @@ import android.content.SharedPreferences.Editor;
 import android.content.res.Configuration;
 import android.graphics.Bitmap;
 import android.graphics.Rect;
+import android.graphics.BitmapFactory;
+import android.graphics.Matrix;
 import android.hardware.Camera.CameraInfo;
 import android.hardware.Camera.Parameters;
 import android.hardware.Camera.Size;
@@ -94,6 +96,7 @@ import java.io.FileNotFoundException;
 import java.io.FileOutputStream;
 import java.io.IOException;
 import java.io.OutputStream;
+import java.io.ByteArrayOutputStream;
 import java.util.List;
 import java.util.Vector;
 import java.util.HashMap;
@@ -1188,7 +1191,7 @@ public class PhotoModule
         }

         @Override
-        public void onPictureTaken(final byte [] jpegData, CameraProxy camera) {
+        public void onPictureTaken(byte [] jpegData, CameraProxy camera) {
             if (mCameraState != LONGSHOT) {
                 mUI.enableShutter(true);
             }
@@ -1335,6 +1338,9 @@ public class PhotoModule
                             exif.setTag(directionRefTag);
                             exif.setTag(directionTag);
                         }
+                        //add by djw
+                        jpegData = adjustPhotoRotation(jpegData, 90);
+
                         String mPictureFormat = mParameters.get(KEY_PICTURE_FORMAT);
                             mActivity.getMediaSaveService().addImage(
                                     jpegData, title, date, mLocation, width, height,
@@ -1365,6 +1371,9 @@ public class PhotoModule
                         }

                     } else {
+                        //add by djw
+                        jpegData = adjustPhotoRotation(jpegData, 90);
+
                         mJpegImageData = jpegData;
                         if (!mQuickCapture) {
                             mUI.showCapturedImageForReview(jpegData, orientation, mMirror);
@@ -1411,6 +1420,42 @@ public class PhotoModule
         }
     }

+       //add by djw
+    private byte[] rotate(byte[] jpegData) {
+        if (jpegData != null) {
+            Bitmap bm0 = BitmapFactory.decodeByteArray(jpegData, 0, jpegData.length);
+            /*Matrix matrix = new Matrix();
+            matrix.setRotate(90, (float) bm0.getWidth() / 2, (float) bm0.getHeight() / 2);
+            matrix.postScale(-1, 1);
+            Bitmap bm = Bitmap.createBitmap(bm0, 0, 0, bm0.getWidth(), bm0.getHeight(), matrix, true);*/
+                       Bitmap bm = CameraUtil.rotateAndMirror(bm0, 270, true);
+            ByteArrayOutputStream baos = new ByteArrayOutputStream();
+            bm.compress(Bitmap.CompressFormat.JPEG, 100, baos);
+            return baos.toByteArray();
+        } else {
+            return null;
+        }
+    }
+
+       private byte[] adjustPhotoRotation(byte[] jpegData, final int orientationDegree) {
+               if (jpegData != null) {
+                       Bitmap bm = BitmapFactory.decodeByteArray(jpegData, 0, jpegData.length);
+                       Matrix m = new Matrix();
+                       m.setRotate(orientationDegree, (float) bm.getWidth() / 2, (float) bm.getHeight() / 2);
+                       try {
+                               Bitmap bm1 = Bitmap.createBitmap(bm, 0, 0, bm.getWidth(), bm.getHeight(), m, true);
+                               ByteArrayOutputStream baos = new ByteArrayOutputStream();
+                               bm1.compress(Bitmap.CompressFormat.JPEG, 100, baos);
+                               return baos.toByteArray();
+                       } catch (OutOfMemoryError ex) {
+                               ex.printStackTrace();
+                       }
+                       return null;
+               } else {
+                       return null;
+               }
+       }
+
     private OnSeekBarChangeListener mSeekListener = new OnSeekBarChangeListener() {
         public void onStartTrackingTouch(SeekBar bar) {
         // no support

后记

后来查看 高通骁龙平台 Camera移植文档,找到 摄像头预览界面的方向 的配置参数
代码路径:LINUX/android/kernel/arch/arm/boot/dts/qcom
文件名:msm8909-camera-sensor-qrd-skui.dtsi

qcom,mount-angle = <270>;
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值