前言
此篇博客只为记录照片预览界面图片旋转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>;