FaceStudyPop 拍照方向与镜像修复方案及实施记录

结论:实时预览通过 View 层旋转为正向,但 TextureView.getBitmap() 返回的原始纹理不包含旋转和镜像,导致右侧照片、保存文件和上传头像横倒。本次在生成 mCurrentBitmap 时补齐预览实际变换。

问题现象

左侧实时预览经过方向校正后可以正常显示;点击“拍照”后,右侧照片横倒 90 度,并因横图放入竖向 centerCrop 容器而发生二次裁切。保存和上传文件也保持错误方向。

根因证据

修复边界

实施方案

  1. 新增 captureDisplayedBitmap() 获取 TextureView 原始 Bitmap。
  2. 读取控件实际生效的 getRotation(),兼容 Camera1、K203 Camera2 和高级设置方向。
  3. 读取父预览容器的 getRotationY(),在 180 度时执行水平镜像。
  4. 通过 Matrix 按“旋转后镜像”生成最终 Bitmap,与现有 FaceSDK 变换顺序保持一致。
  5. 右侧显示、PNG 保存和上传共用校正后的 mCurrentBitmap
  6. 连续重拍时回收上一张已不再使用的 Bitmap。

预期结果

环节修复前修复后
TextureView 截图320x240 横图先读取原始图
最终 Bitmap320x240 横倒240x320 正向
保存与上传错误方向与实时预览一致
镜像未进入文件与实时预览一致

为什么不只旋转 ImageView

只旋转 ImageView 只能修正界面显示,保存和上传文件仍然横倒。本方案在数据源 mCurrentBitmap 上修正,确保显示、保存和上传一致。

验证记录

非目标与风险