相机旋转角度的术语
=========

在适配相机旋转角度中涉及设备方向、镜头角度、屏幕显示角度等多个术语，开发者可以了解相关概念，帮助理解框架的运作机制。

#### 设备自然方向

**设备自然方向**指设备默认的使用方向，以手机为例，如图所示，手机的自然方向为竖屏且充电口向下。

![](https://contentcenter-vali-drcn.dbankcdn.cn/pvt_2/DeveloperAlliance_scene_100_1/5d/v3/aDac7VXNQlyGD3uJJGFFXQ/zh-cn_image_0000002634009280.png?HW-CC-KV=V1&HW-CC-Date=20260709T132523Z&HW-CC-Expire=86400&HW-CC-Sign=E7975423EFEA71BEDE19D5F74E7644D51346A70AA555B3D33D9AE8B0D847021E)

#### 屏幕显示方向

**屏幕显示方向**指当前用户视角下，设备正确的显示方向。

![](https://contentcenter-vali-drcn.dbankcdn.cn/pvt_2/DeveloperAlliance_scene_100_1/bc/v3/S0BkQWglQk2LCszycL-n3Q/zh-cn_image_0000002664208429.png?HW-CC-KV=V1&HW-CC-Date=20260709T132523Z&HW-CC-Expire=86400&HW-CC-Sign=6C8204884F5EC1CAEFEA4690C719CEFEDAE0B242C7C0918768510D50915E5CA6)

#### 屏幕旋转角度

显示设备的屏幕顺时针旋转角度，简称为**屏幕旋转角度**，即设备从自然方向到当前方向的顺时针夹角。

如图所示，图示夹角即为屏幕旋转角度，可通过[Display.rotation](https://developer.huawei.com/consumer/cn/doc/harmonyos-references/js-apis-display#属性)获取。

![](https://contentcenter-vali-drcn.dbankcdn.cn/pvt_2/DeveloperAlliance_scene_100_1/82/v3/TTz4TEDzSeWH8Z4ZH3tu-w/zh-cn_image_0000002664328489.png?HW-CC-KV=V1&HW-CC-Date=20260709T132523Z&HW-CC-Expire=86400&HW-CC-Sign=71C0C50836046E7A7CA8ABEE0790CBA55F57C48722AA4C9374B3329960ADD055)

#### 相机镜头安装角度

**相机镜头安装角度**指相机采集图像方向到设备自然方向在顺时针方向的夹角。

以手机为例，手机后置相机传感器是横屏安装的，当手机在竖屏方向使用后置相机镜头拍摄时，相机采集到的原始图像方向如图所示。

此时图像需要顺时针旋转90度，才能与设备自然方向保持一致，所以**后置相机的镜头角度为90度**。

![](https://contentcenter-vali-drcn.dbankcdn.cn/pvt_2/DeveloperAlliance_scene_100_1/dc/v3/4X3eavmNR2-wnMt7CxgOZA/zh-cn_image_0000002633849378.png?HW-CC-KV=V1&HW-CC-Date=20260709T132523Z&HW-CC-Expire=86400&HW-CC-Sign=2B51647983B6ADFB8DFEBC6F6CF3A865DAB66F1FF1D05D47E55AB155F750E5E0)

而手机前置镜头，是朝向使用者的，当手机在竖屏方向使用前置相机镜头拍摄时，出图方向与后置出图方向互为镜像，如下图所示，**前置相机的镜头角度为270度**。

![](https://contentcenter-vali-drcn.dbankcdn.cn/pvt_2/DeveloperAlliance_scene_100_1/23/v3/RxTQwbVfTxG3r6-zIOHarw/zh-cn_image_0000002634009282.png?HW-CC-KV=V1&HW-CC-Date=20260709T132523Z&HW-CC-Expire=86400&HW-CC-Sign=9F465D59E1E527A825BC66FA02D10C19E022732A02D6B13EE160CA4FAF56DD2A)

#### 预览旋转角度

![](https://contentcenter-vali-drcn.dbankcdn.cn/pvt_2/DeveloperAlliance_scene_100_1/1a/v3/kS6sfxH4QTW9knL8COIYzA/note_3.0-zh-cn.png?HW-CC-KV=V1&HW-CC-Date=20260709T132523Z&HW-CC-Expire=86400&HW-CC-Sign=CA0762DD7CBDF7F5DE5F657F9C20DF6C70502D8816A07DFE4F5E1BB4FCF90FFD)

开发者可参考以下章节，了解框架实现的机制，在实际开发过程中，推荐通过接口[获取预览旋转角度](https://developer.huawei.com/consumer/cn/doc/harmonyos-guides/camera-rotation-angle-adaptation#预览)。

在预览时，图像旋转角度与屏幕显示旋转角度相关。系统将以原始图像方向为基线，根据相机镜头角度和屏幕显示补偿角度，旋转图像。

计算公式：图像旋转角度=镜头安装角度+屏幕显示补偿角度，屏幕显示补偿角度的值与屏幕旋转角度相等。

以手机设备为例展示相机在预览下如何处理图像，计算的角度设置给系统侧，作用于直接送显场景，应用自绘制参考[应用自绘制预览角度处理](#应用自绘制预览角度处理)。

| 设备和镜头方向 | 处理过程示意图 |
| :-- | :-- |
| 
**设备条件：**

手机竖屏、充电口向下。

使用后置相机拍摄。

**可得：**

\- 后置相机镜头角度 = 90°

\- 屏幕旋转角度= 0°，[Display.rotation](https://developer.huawei.com/consumer/cn/doc/harmonyos-references/js-apis-display#属性) = 0

\- **图像预览旋转角度 = 90°+0° = 90°**

 | ![](https://contentcenter-vali-drcn.dbankcdn.cn/pvt_2/DeveloperAlliance_scene_100_1/12/v3/AbQekoDRTCiU60d1ABiAwg/zh-cn_image_0000002664208431.png?HW-CC-KV=V1&HW-CC-Date=20260709T132523Z&HW-CC-Expire=86400&HW-CC-Sign=F3768D5B04C4C65ED5B2459F8972BD4128A3CCFBF3851793E15F22F822E20EC2) |
| 

**设备条件：**

手机横屏、充电口向左。

使用后置相机拍摄。

**可得：**

\- 后置相机镜头角度 = 90°

\- 屏幕旋转角度 = 90°，[Display.rotation](https://developer.huawei.com/consumer/cn/doc/harmonyos-references/js-apis-display#属性) = 1

\- **图像预览旋转角度 = 90°+90° = 180°**

 | ![](https://contentcenter-vali-drcn.dbankcdn.cn/pvt_2/DeveloperAlliance_scene_100_1/50/v3/Kpe2eQXGTta5TyrDz_NoOA/zh-cn_image_0000002664328491.png?HW-CC-KV=V1&HW-CC-Date=20260709T132523Z&HW-CC-Expire=86400&HW-CC-Sign=93AA185FA47F9FDFAF4C91DA5F582F4E201D174F7ACD03DBB36C661571BA6453) |
| 

**设备条件：**

手机竖屏、充电口向上。

使用后置相机拍摄。

**可得：**

\- 后置相机镜头角度 = 90°

\- 屏幕旋转角度 = 180°，[Display.rotation](https://developer.huawei.com/consumer/cn/doc/harmonyos-references/js-apis-display#属性) = 2

\- **图像预览旋转角度 = 90°+180° = 270°**

 | ![](https://contentcenter-vali-drcn.dbankcdn.cn/pvt_2/DeveloperAlliance_scene_100_1/75/v3/4ZzsyQfoSWK0-yjggOFxnw/zh-cn_image_0000002633849380.png?HW-CC-KV=V1&HW-CC-Date=20260709T132523Z&HW-CC-Expire=86400&HW-CC-Sign=4F654E3A3F3FB41C71B8A4A242FBA05C92FEB7B9039E69FB74F19855C1BC2F81) |
| 

**设备条件：**

手机横屏、充电口向右。

使用后置相机拍摄。

**可得：**

\- 后置相机镜头角度 = 90°

\- 屏幕旋转角度 = 270°，[Display.rotation](https://developer.huawei.com/consumer/cn/doc/harmonyos-references/js-apis-display#属性) = 3

\- **图像预览旋转角度 = 90°+270° = 0°**

 | ![](https://contentcenter-vali-drcn.dbankcdn.cn/pvt_2/DeveloperAlliance_scene_100_1/14/v3/2u8saG0kSNS8paoJqhQbfg/zh-cn_image_0000002634009284.png?HW-CC-KV=V1&HW-CC-Date=20260709T132523Z&HW-CC-Expire=86400&HW-CC-Sign=F09B0E88D12FC4EEA5F62EB190FFA2A5726DBE506DC2774E227557F995C43970) |
| 

**设备条件：**

手机竖屏、充电口向下。

使用前置相机拍摄。

**可得：**

\- 前置相机镜头角度 = 270°

\- 前置相机镜像出图

\- 屏幕旋转角度= 0°，[Display.rotation](https://developer.huawei.com/consumer/cn/doc/harmonyos-references/js-apis-display#属性) = 0

\- **图像预览旋转角度 = 270°+0° = 270°**

 | ![](https://contentcenter-vali-drcn.dbankcdn.cn/pvt_2/DeveloperAlliance_scene_100_1/69/v3/niO6mlm0Sb6w_-WsGUBhZQ/zh-cn_image_0000002664208433.png?HW-CC-KV=V1&HW-CC-Date=20260709T132523Z&HW-CC-Expire=86400&HW-CC-Sign=8B54AECE1682ED1F2FC20760919CEA6FA06359FD8AD0CB4A7451264721FFE2A9) |
| 

**设备条件：**

手机横屏、充电口向左。

使用前置相机拍摄。

**可得：**

\- 前置相机镜头角度 = 270°

\- 前置相机镜像出图

\- 屏幕旋转角度 = 90°，[Display.rotation](https://developer.huawei.com/consumer/cn/doc/harmonyos-references/js-apis-display#属性) = 1

\- **图像预览旋转角度 = 270°+90° =0°**

 | ![](https://contentcenter-vali-drcn.dbankcdn.cn/pvt_2/DeveloperAlliance_scene_100_1/34/v3/ESgmVYX4Qwuu3txev3ATtQ/zh-cn_image_0000002664328493.png?HW-CC-KV=V1&HW-CC-Date=20260709T132523Z&HW-CC-Expire=86400&HW-CC-Sign=6B19D213CF3B402261F44F8E54D3076C7A721646D03B69511D30FEC0846FBFAE) |
| 

**设备条件：**

手机竖屏、充电口向上。

使用前置相机拍摄。

**可得：**

\- 前置相机镜头角度 = 270°

\- 前置相机镜像出图

\- 屏幕旋转角度 = 180°，[Display.rotation](https://developer.huawei.com/consumer/cn/doc/harmonyos-references/js-apis-display#属性) = 2

\- **图像预览旋转角度 = 270°+180° = 90°**

 | ![](https://contentcenter-vali-drcn.dbankcdn.cn/pvt_2/DeveloperAlliance_scene_100_1/24/v3/oJvhfkBNRESSmvmWRC3GFA/zh-cn_image_0000002633849382.png?HW-CC-KV=V1&HW-CC-Date=20260709T132523Z&HW-CC-Expire=86400&HW-CC-Sign=C9CD889578FC46572A881F7C04107FF70445BA49C00C7E7E88CE27EF4E1CA826) |
| 

**设备条件：**

手机横屏、充电口向右。

使用前置相机拍摄。

**可得：**

\- 前置相机镜头角度 = 270°

\- 前置相机镜像出图

\- 屏幕旋转角度 = 270°，[Display.rotation](https://developer.huawei.com/consumer/cn/doc/harmonyos-references/js-apis-display#属性) = 3

\- **图像预览旋转角度 = 270°+270° = 180°**

 | ![](https://contentcenter-vali-drcn.dbankcdn.cn/pvt_2/DeveloperAlliance_scene_100_1/fc/v3/r4ACXJZ2TsK6lpslWmIVMQ/zh-cn_image_0000002634009286.png?HW-CC-KV=V1&HW-CC-Date=20260709T132523Z&HW-CC-Expire=86400&HW-CC-Sign=B475D8CBAA1057AF84B1012733EB813C9EE0051FBEAFAB4775590C5931435ACA) |

#### 应用自绘制预览角度处理

应用自绘制场景是指应用获取图片后，通过libyuv、GL等图形处理库进行二次处理，生成新的图像数据并送到显示设备进行渲染绘制。

常见的实现方式是通过使用imageReceiver创建的回调流，应用层作为消费端，自行处理图片旋转等操作，以适应自绘制场景的预览角度需求。自绘制场景预览角度与[预览旋转角度](#预览旋转角度)中描述的场景存在细微差异。

主要差异体现在使用前置镜头拍摄预览的场景：

*   自绘制场景可以按照[预览旋转角度](#预览旋转角度)中的图示方式，先根据镜头的安装角度进行旋转，随后进行镜像处理，最后再次旋转以适应屏幕角度。然而，这种方式包含多个步骤，较为繁琐，不被推荐。
    
*   自绘制场景也可以采取先旋转再镜像的方式，这种方式需要考虑水平镜像和垂直镜像，具体的处理步骤如下图所示，代码实现可参考[自绘制场景预览角度的归一化处理](https://developer.huawei.com/consumer/cn/doc/harmonyos-guides/camera-rotation-angle-adaptation#自绘制场景预览角度的归一化处理)。
    

| 设备和镜头方向 | 处理过程示意图 |
| :-- | :-- |
| 
**设备条件：**

手机竖屏、充电口向下。

使用前置相机拍摄。

**可得：**

\- 前置相机镜头角度 = 270°

\- 前置相机镜像出图

\- 屏幕旋转角度= 0°，[Display.rotation](https://developer.huawei.com/consumer/cn/doc/harmonyos-references/js-apis-display#属性) = 0

\- **图像预览旋转角度 = 270°+0° = 270°**

 | ![](https://contentcenter-vali-drcn.dbankcdn.cn/pvt_2/DeveloperAlliance_scene_100_1/f4/v3/PVt-AArpRmWZFDsZZtL_jQ/zh-cn_image_0000002664208435.png?HW-CC-KV=V1&HW-CC-Date=20260709T132523Z&HW-CC-Expire=86400&HW-CC-Sign=7B74CE03B5EDBB96992EBB18DCEE61107F91EF1337F96F67AD05598DFF35A412) |
| 

**设备条件：**

手机横屏、充电口向左。

使用前置相机拍摄。

**可得：**

\- 前置相机镜头角度 = 270°

\- 前置相机镜像出图

\- 屏幕旋转角度 = 90°，[Display.rotation](https://developer.huawei.com/consumer/cn/doc/harmonyos-references/js-apis-display#属性) = 1

\- **图像预览旋转角度 = 270°+90° = 0°**

 | ![](https://contentcenter-vali-drcn.dbankcdn.cn/pvt_2/DeveloperAlliance_scene_100_1/c2/v3/rwXkcKL8R0eCajZ9_ZRjHg/zh-cn_image_0000002664328495.png?HW-CC-KV=V1&HW-CC-Date=20260709T132523Z&HW-CC-Expire=86400&HW-CC-Sign=D3CA9DE29D7CD26288E4DC4967EFAE6693DA8014CDE86FFD366EB7CD8B7E75F0) |

#### 拍照/录像角度

在拍照、录像时，图像旋转角度与设备重力方向（即设备旋转角度）相关。

*   使用后置相机拍摄时，图像旋转角度=[镜头安装角度](#相机镜头安装角度)+重力方向。
    
*   使用前置相机拍摄时，图像旋转角度=[镜头安装角度](#相机镜头安装角度)\-重力方向。
    

| 设备和镜头方向 | 处理过程示意图 |
| :-- | :-- |
| 
**设备条件：**

手机横屏、充电口向左。

使用后置相机拍摄。

**可得：**

\- 后置相机镜头角度 = 90°

\- 设备旋转角度 = 90°

\- **图像预览旋转角度 = 90°+90° = 180°**

 | ![](https://contentcenter-vali-drcn.dbankcdn.cn/pvt_2/DeveloperAlliance_scene_100_1/34/v3/J-lHkKI7R7G4rT-hsbi38w/zh-cn_image_0000002633849384.png?HW-CC-KV=V1&HW-CC-Date=20260709T132523Z&HW-CC-Expire=86400&HW-CC-Sign=ECF903FC15A8B40E78E66672F0E6E000771FD1D825F8F80BA86B55BBBA540F9C) |

应用需要监听[SensorId.GRAVITY](https://developer.huawei.com/consumer/cn/doc/harmonyos-references/js-apis-sensor#sensoronsensoridgravity9)事件，获取重力传感器在x、y、z三个方向上的数据，计算得出设备旋转角度，请参考[计算设备旋转角度](https://developer.huawei.com/consumer/cn/doc/harmonyos-guides/camera-rotation-angle-adaptation#计算设备旋转角度)。