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

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

#### 设备自然方向

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

![](https://contentcenter-vali-drcn.dbankcdn.cn/pvt_2/DeveloperAlliance_scene_100_1/c4/v3/FP995J0jTwyYrRs3CzsvSA/zh-cn_image_0000002625108349.png?HW-CC-KV=V1&HW-CC-Date=20260612T073517Z&HW-CC-Expire=86400&HW-CC-Sign=C9F1132FF3A88A7DAE47E53E5F8FA66C0C8D94D1D24695CA4B25854EAF59C535)

#### 屏幕显示方向

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

![](https://contentcenter-vali-drcn.dbankcdn.cn/pvt_2/DeveloperAlliance_scene_100_1/e1/v3/Bc0-o3TcTietQ7n--Kvgog/zh-cn_image_0000002594668832.png?HW-CC-KV=V1&HW-CC-Date=20260612T073517Z&HW-CC-Expire=86400&HW-CC-Sign=EE5F670F507DF258FA59FAD17D57B7DF6D6B0A6A39AD6822FE6589690998E30E)

#### 屏幕旋转角度

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

如图所示，图示夹角即为屏幕旋转角度，可通过[OH\_NativeDisplayManager\_GetDefaultDisplayRotation](https://developer.huawei.com/consumer/cn/doc/harmonyos-references/capi-oh-display-manager-h#oh_nativedisplaymanager_getdefaultdisplayrotation)获取。

![](https://contentcenter-vali-drcn.dbankcdn.cn/pvt_2/DeveloperAlliance_scene_100_1/a8/v3/K6tMX-GhRFeylak81XnEQw/zh-cn_image_0000002594828760.png?HW-CC-KV=V1&HW-CC-Date=20260612T073517Z&HW-CC-Expire=86400&HW-CC-Sign=47B417FA358E5A65E3F28015FE39DF2742CCF2B36638605DBE2303CF62767586)

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

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

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

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

![](https://contentcenter-vali-drcn.dbankcdn.cn/pvt_2/DeveloperAlliance_scene_100_1/fd/v3/OCfVebW1RzOo1QOiGXgFaQ/zh-cn_image_0000002625188207.png?HW-CC-KV=V1&HW-CC-Date=20260612T073517Z&HW-CC-Expire=86400&HW-CC-Sign=57F64CFBCE9A2D1DDADB9C0266C7C83B1DD10C96AD34E1629408AE934FF20248)

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

![](https://contentcenter-vali-drcn.dbankcdn.cn/pvt_2/DeveloperAlliance_scene_100_1/80/v3/J6_O9jIiS-etmJx_NpAzLw/zh-cn_image_0000002625108351.png?HW-CC-KV=V1&HW-CC-Date=20260612T073517Z&HW-CC-Expire=86400&HW-CC-Sign=7622DF2090566FEAB7DE4D72CFB42D209FC5027606F65CF4CF60D81A9F88BEB3)

#### 预览旋转角度

![](https://contentcenter-vali-drcn.dbankcdn.cn/pvt_2/DeveloperAlliance_scene_100_1/58/v3/htHhrhVZSI-roSdL-v4JeQ/note_3.0-zh-cn.png?HW-CC-KV=V1&HW-CC-Date=20260612T073517Z&HW-CC-Expire=86400&HW-CC-Sign=C295CC9ECEE13D452B80E41C073425C0292D6F230B77F78321D03136044FBDE4)

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

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

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

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

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

手机竖屏、充电口向下。

使用后置相机拍摄。

**可得：**

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

\- 屏幕旋转角度= 0°，[displayRotation](https://developer.huawei.com/consumer/cn/doc/harmonyos-references/capi-oh-display-info-h#nativedisplaymanager_rotation) = 0

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

 | ![](https://contentcenter-vali-drcn.dbankcdn.cn/pvt_2/DeveloperAlliance_scene_100_1/11/v3/yKuiqInhRieQDISuLqXuJw/zh-cn_image_0000002594668834.png?HW-CC-KV=V1&HW-CC-Date=20260612T073517Z&HW-CC-Expire=86400&HW-CC-Sign=A643FDE8279956CB52DF46B26913E27ADB189468B11AAFB4D4EC05FAA9AFA359) |
| 

**设备条件：**

手机横屏、充电口向左。

使用后置相机拍摄。

**可得：**

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

\- 屏幕旋转角度 = 90°，[displayRotation](https://developer.huawei.com/consumer/cn/doc/harmonyos-references/capi-oh-display-info-h#nativedisplaymanager_rotation) = 1

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

 | ![](https://contentcenter-vali-drcn.dbankcdn.cn/pvt_2/DeveloperAlliance_scene_100_1/22/v3/GDpzEKXWS76ZMQ9hlxLpFQ/zh-cn_image_0000002594828762.png?HW-CC-KV=V1&HW-CC-Date=20260612T073517Z&HW-CC-Expire=86400&HW-CC-Sign=175AF7F3050982BFBEB8F5C963509D7800DF60C9EAE16FFB611D870A820FBFCB) |
| 

**设备条件：**

手机竖屏、充电口向上。

使用后置相机拍摄。

**可得：**

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

\- 屏幕旋转角度 = 180°，[displayRotation](https://developer.huawei.com/consumer/cn/doc/harmonyos-references/capi-oh-display-info-h#nativedisplaymanager_rotation) = 2

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

 | ![](https://contentcenter-vali-drcn.dbankcdn.cn/pvt_2/DeveloperAlliance_scene_100_1/36/v3/RFE4BxadQHS5ftDPZ_pApA/zh-cn_image_0000002625188209.png?HW-CC-KV=V1&HW-CC-Date=20260612T073517Z&HW-CC-Expire=86400&HW-CC-Sign=F4ACCE98AF4FF4B9731BF36F1991F8B51F38D376BB5AC65A6F5A66486E53CF18) |
| 

**设备条件：**

手机横屏、充电口向右。

使用后置相机拍摄。

**可得：**

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

\- 屏幕旋转角度 = 270°，[displayRotation](https://developer.huawei.com/consumer/cn/doc/harmonyos-references/capi-oh-display-info-h#nativedisplaymanager_rotation) = 3

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

 | ![](https://contentcenter-vali-drcn.dbankcdn.cn/pvt_2/DeveloperAlliance_scene_100_1/0b/v3/esI69p3qRbmSYo1J6IIQLg/zh-cn_image_0000002625108353.png?HW-CC-KV=V1&HW-CC-Date=20260612T073517Z&HW-CC-Expire=86400&HW-CC-Sign=E45FBA9D60D40F249755ABA4E40A156E54FC9D4580A6A300E6E371C74AE7317C) |
| 

**设备条件：**

手机竖屏、充电口向下。

使用前置相机拍摄。

**可得：**

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

\- 前置相机镜像出图

\- 屏幕旋转角度= 0°，[displayRotation](https://developer.huawei.com/consumer/cn/doc/harmonyos-references/capi-oh-display-info-h#nativedisplaymanager_rotation) = 0

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

 | ![](https://contentcenter-vali-drcn.dbankcdn.cn/pvt_2/DeveloperAlliance_scene_100_1/37/v3/zcwrA_QXS6KT6VxnuDwGJw/zh-cn_image_0000002594668836.png?HW-CC-KV=V1&HW-CC-Date=20260612T073517Z&HW-CC-Expire=86400&HW-CC-Sign=35C308B7EBB404DB1392A1A9BCB3B11A2E8CC0C36AADDE1A4863305DB43643E3) |
| 

**设备条件：**

手机横屏、充电口向左。

使用前置相机拍摄。

**可得：**

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

\- 前置相机镜像出图

\- 屏幕旋转角度 = 90°，[displayRotation](https://developer.huawei.com/consumer/cn/doc/harmonyos-references/capi-oh-display-info-h#nativedisplaymanager_rotation) = 1

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

 | ![](https://contentcenter-vali-drcn.dbankcdn.cn/pvt_2/DeveloperAlliance_scene_100_1/94/v3/E9UrWxBhR7KlM9DcLWg7QA/zh-cn_image_0000002594828764.png?HW-CC-KV=V1&HW-CC-Date=20260612T073517Z&HW-CC-Expire=86400&HW-CC-Sign=9E83A854B0AEF71EF4A982E6136356D9AD6E35D5E6449740A280911FCB677503) |
| 

**设备条件：**

手机竖屏、充电口向上。

使用前置相机拍摄。

**可得：**

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

\- 前置相机镜像出图

\- 屏幕旋转角度 = 180°，[displayRotation](https://developer.huawei.com/consumer/cn/doc/harmonyos-references/capi-oh-display-info-h#nativedisplaymanager_rotation) = 2

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

 | ![](https://contentcenter-vali-drcn.dbankcdn.cn/pvt_2/DeveloperAlliance_scene_100_1/9/v3/cfTykd93T6yNAulF_7DXzw/zh-cn_image_0000002625188211.png?HW-CC-KV=V1&HW-CC-Date=20260612T073517Z&HW-CC-Expire=86400&HW-CC-Sign=F47EFBB4EF45FBAD01A092AB31140F6DF89134504393A352950A796A0FFF893A) |
| 

**设备条件：**

手机横屏、充电口向右。

使用前置相机拍摄。

**可得：**

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

\- 前置相机镜像出图

\- 屏幕旋转角度 = 270°，[displayRotation](https://developer.huawei.com/consumer/cn/doc/harmonyos-references/capi-oh-display-info-h#nativedisplaymanager_rotation) = 3

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

 | ![](https://contentcenter-vali-drcn.dbankcdn.cn/pvt_2/DeveloperAlliance_scene_100_1/4b/v3/OKF49etbQi-deepbqWMLvw/zh-cn_image_0000002625108355.png?HW-CC-KV=V1&HW-CC-Date=20260612T073517Z&HW-CC-Expire=86400&HW-CC-Sign=7E6A3978FA78877FD233A2989F210F0DC578DD1E86CD494BB139994C6FBE101C) |

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

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

常见的实现方式是通过使用[image\_receiver\_native.h](https://developer.huawei.com/consumer/cn/doc/harmonyos-references/capi-image-receiver-native-h)创建的回调流，应用层作为消费端，自行处理图片旋转等操作，以适应自绘制场景的预览角度需求。自绘制场景预览角度与[预览旋转角度](#预览旋转角度)中描述的场景存在细微差异。

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

*   自绘制场景可以按照[预览旋转角度](#预览旋转角度)中的图示方式，先根据镜头的安装角度进行旋转，随后进行镜像处理，最后再次旋转以适应屏幕角度。然而，这种方式包含多个步骤，较为繁琐，不被推荐。
    
*   自绘制场景也可以采取先旋转再镜像的方式，这种方式需要考虑水平镜像和垂直镜像，具体的处理步骤如下图所示。
    

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

手机竖屏、充电口向下。

使用前置相机拍摄。

**可得：**

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

\- 前置相机镜像出图

\- 屏幕旋转角度= 0°，[displayRotation](https://developer.huawei.com/consumer/cn/doc/harmonyos-references/capi-oh-display-info-h#nativedisplaymanager_rotation) = 0

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

 | ![](https://contentcenter-vali-drcn.dbankcdn.cn/pvt_2/DeveloperAlliance_scene_100_1/be/v3/PTJIEUyLSWyaqNEJsBkklg/zh-cn_image_0000002594668838.png?HW-CC-KV=V1&HW-CC-Date=20260612T073517Z&HW-CC-Expire=86400&HW-CC-Sign=62D99B51F6B723FA1EB11DBD92EFA53D70C03A801DE0D9455F770E4479D3F044) |
| 

**设备条件：**

手机横屏、充电口向左。

使用前置相机拍摄。

**可得：**

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

\- 前置相机镜像出图

\- 屏幕旋转角度 = 90°，[displayRotation](https://developer.huawei.com/consumer/cn/doc/harmonyos-references/capi-oh-display-info-h#nativedisplaymanager_rotation) = 1

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

 | ![](https://contentcenter-vali-drcn.dbankcdn.cn/pvt_2/DeveloperAlliance_scene_100_1/e0/v3/PYwKCmgERhGMFn9ueG4Lfg/zh-cn_image_0000002594828766.png?HW-CC-KV=V1&HW-CC-Date=20260612T073517Z&HW-CC-Expire=86400&HW-CC-Sign=EEA44132FE767EFB40D7149727D4321AF63626AEC79C1D735ED024F429DB7211) |

#### 拍照/录像角度

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

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

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

手机横屏、充电口向左。

使用后置相机拍摄。

**可得：**

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

\- 设备旋转角度 = 90°

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

 | ![](https://contentcenter-vali-drcn.dbankcdn.cn/pvt_2/DeveloperAlliance_scene_100_1/1f/v3/vc1BblirSfaeHYirgabacg/zh-cn_image_0000002625188213.png?HW-CC-KV=V1&HW-CC-Date=20260612T073517Z&HW-CC-Expire=86400&HW-CC-Sign=DE5E5A7CF0EA5479638EB0090C28FBE1DB89EAFD4FFEE08AD8599A64ECC0E556) |

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