您是否在您的靜止捕捉請求中使用了JPEG_ORIENTATION控件?如果沒有,那可能是問題 - 該控件告訴相機設備如何將最終的JPEG圖像旋轉爲正面朝上。
因此,您需要更新該控件中的值以描述圖像傳感器當前相對於世界的排列方式。
要做到這一點計算,你需要從加速度計輸入(它告訴你哪個方向是向下),然後是一些基本的數學 - 從上面的鏈接複製此:
private int getJpegOrientation(CameraCharacteristics c, int deviceOrientation) {
if (deviceOrientation == android.view.OrientationEventListener.ORIENTATION_UNKNOWN) return 0;
int sensorOrientation = c.get(CameraCharacteristics.SENSOR_ORIENTATION);
// Round device orientation to a multiple of 90
deviceOrientation = (deviceOrientation + 45)/90 * 90;
// Reverse device orientation for front-facing cameras
boolean facingFront = c.get(CameraCharacteristics.LENS_FACING) == CameraCharacteristics.LENS_FACING_FRONT;
if (facingFront) deviceOrientation = -deviceOrientation;
// Calculate desired JPEG orientation relative to camera orientation to make
// the image upright relative to the device orientation
int jpegOrientation = (sensorOrientation + deviceOrientation + 360) % 360;
return jpegOrientation;
}
其中輸入deviceOrientation來自傳感器API。
將其中一個圖像從設備上拉出來,並使用'exiftool'或其他東西進行檢查。或者,將一些使用'ExifInterface'的'com.android.support:exifinterface'版本的代碼一起扔掉。無論哪種情況,您都在查看是否存在具有期望值的定位EXIF標籤。如果存在,那麼問題不在於保存圖像,而是您正在使用的圖庫應用程序中的錯誤。歡迎嘗試在保存之前手動旋轉圖像(並刪除方向標記),但可能沒有足夠的堆空間來執行此操作。 – CommonsWare
如果OTOH,該標籤丟失,那麼在保存圖像的方式上可能存在錯誤,這需要[mcve]。 – CommonsWare
我在其中一個selfies上運行exiftool,並獲得了一個方向標籤:「旋轉270 CW」。所以我猜畫廊有問題嗎? – barouf