android: 修正横屏拍摄方向——文件旋转跟随握持角度,不再只跟显示旋转
用户:"切到横屏拍照片和视频方向又不对了"。 根因:上一轮把文件旋转定成显示旋转(锁定 90° + 手动旋转),而这与手机物理姿态无关。 相机模组固定在手机上,手机转 90° 场景就在传感器画面里转 90°,文件必须跟着转, 否则横屏拍出来就是"竖幅文件里装着横躺的场景"。 修法(普通相机做法):文件旋转 = 显示旋转 + 握持角度(PhotoSaver.captureRotation, 握持角取自 DeviceOrientation.deg)。竖直/倒置 → 竖幅 720x960;两个横屏姿态 → 横幅 960x720,且两者相差 180°。录像在开始录制时采样一次(编码尺寸固定)。预览仍保持锁定 (用户此前明确要求),所以横屏文件不是预览截图,而是预览再转一个握持角。 真机复现时设备恰在 270° 姿态(gx=9.88, gy=-1.02 即 deg=270): 修复前 720x960 竖幅;修复后 960x720 横幅,把修复前文件转 -90° 与新文件逐像素比对 平均亮度差 5.06、转 +90° 为 40.94 —— 方向正确且只差这一转。录像 tkhd 960x720 97帧 0 丢弃;分析页读横幅照片 rot=0:MIN/MAX 各一个且与烧录标记重合。 新增 savedFileRotationFollowsTheGrip / landscapeGripsProduceLandscapeFiles。 105 项测试全绿。文档补记教训:文件方向是世界坐标问题、预览方向是屏幕坐标问题, 两者可以不同;这类"方向正确"必须用同一场景在不同姿态下可复现拍摄来验证。
This commit is contained in:
@@ -489,6 +489,47 @@
|
||||
"未连接"分支显示,正常出图时用户看不到任何反馈)。
|
||||
- [x] 单测 66 → **76 项全绿**;debug + release(R8) 双构建通过;APK 已更新。
|
||||
|
||||
## 用户反馈修复 第二十四轮(2026-09-12,横屏拍摄方向:文件跟随握持角度)
|
||||
|
||||
用户反馈:"切到横屏拍照片和视频方向又不对了"。
|
||||
|
||||
**根因**:上一轮把照片旋转定为**显示旋转**(锁定 90° + 手动旋转),但这个值与手机的
|
||||
物理姿态无关。相机模组是**固定在手机上的**,手机转 90°,场景就在传感器画面里转 90°,
|
||||
所以文件必须跟着转——否则横屏拍出来就是"竖幅文件里装着横躺的场景"。
|
||||
|
||||
**修法**(普通相机的做法):
|
||||
|
||||
```
|
||||
文件旋转 = 显示旋转 + 握持角度 (PhotoSaver.captureRotation)
|
||||
```
|
||||
|
||||
握持角度取自 `DeviceOrientation.deg`(0 竖直/90 顺时针/180 倒置/270 逆时针)。
|
||||
推论:竖直与倒置 → 竖幅文件(720×960);两个横屏姿态 → 横幅文件(960×720),
|
||||
且两者相差 180°(场景在两种横屏姿态下本来就上下颠倒)。录像在**开始录制时**采样一次
|
||||
(编码尺寸固定,中途换手不旋转——所有相机都如此)。
|
||||
|
||||
注意这**不影响预览**:预览仍是锁定的(用户此前明确要求"热成像画面还是要锁定")。
|
||||
所以横屏下拍出来的文件不是预览的截图,而是预览**再转一个握持角**——正是这一步让
|
||||
场景在文件里是正的。
|
||||
|
||||
**真机验证(关键证据)**:测试时设备恰好停在 270° 横屏姿态(`dumpsys sensorservice`
|
||||
读数 gx=9.88, gy=-1.02 → deg=270),于是直接复现了用户的问题:
|
||||
|
||||
- 修复前:720×960 **竖幅**,内容相对竖直姿态拍的照片转了 90°
|
||||
- 修复后:960×720 **横幅**;把修复前的文件转 **-90°** 与新文件逐像素比对,
|
||||
平均亮度差 **5.06**,而转 +90° 的差是 **40.94** → 方向正确、只差这一转
|
||||
- 录像:`tkhd 960 x 720`、avc1、97 帧 0 丢弃
|
||||
- 分析页读该横幅照片(rot=0):MIN/MAX 各一个、与烧录标记重合,
|
||||
面板 41.4 / 21.7 / 27.0 与照片一致
|
||||
|
||||
新增测试 `savedFileRotationFollowsTheGrip`(四种握持角度 + 手动旋转叠加)与
|
||||
`landscapeGripsProduceLandscapeFiles`(形状规则 + 两个横屏姿态相差 180°)。
|
||||
105 项测试全绿。
|
||||
|
||||
**教训**:文件方向是"世界坐标"问题,预览方向是"屏幕坐标"问题——两者可以不同,
|
||||
混为一谈就会在某个握持姿态下出错。固件级/相机类功能的"方向正确"必须用
|
||||
**同一场景在不同姿态下的可复现拍摄**来验证,不能只靠推导。
|
||||
|
||||
## 用户反馈修复 第二十三轮(2026-09-12,照片竖屏 / 标注风格重做 / 录像清晰度)
|
||||
|
||||
用户第五轮反馈(三点):竖屏拍照出来的照片不是竖屏;录像里的温度标点糊;
|
||||
|
||||
Reference in New Issue
Block a user