我们知道手机 Camera 的图像数据都是来自于摄像头硬件的图像传感器(Image Sensor),这个 Sensor 被固定到手机之后是有一个默认的取景方向的,这个方向如下图所示,坐标原点位于手机横放时的左上角:

Camera 预览方向

由于手机屏幕可以 360 度旋转,为了保证用户无论怎么旋转手机都能看到“正确”的预览画面。Android 系统底层根据当前手机屏幕的方向对图像 Sensor 采集到的数据进行了旋转处理后才传输给显示系统。因此,你在打开 Camera 应用后,无论怎么旋转手机都能看到“正确”的画面。

这里的“正确”是指显示在预览界面的画面与你人眼看到的眼前的画面是一致的

Android 系统提供一个 API 来手动设置 Camera 的预览方向,叫 setDisplayOrientation。默认情况下这个值是0,与图像 Sensor 方向一致,所以对于横屏应用来说就不需要更改这个 Camera 预览方向。
但是,如果你的应用是竖屏应用,就必须通过这个 API 将 Camera 的预览方向旋转 90 度,让摄像头预览方向与手机屏幕方向保持一致,这样才会得到正确的预览画面。

Camera 拍照方向

当你点击拍照按钮,得到的图片方向不一定与画面中的预览方向一致,这是因为拍摄的照片是将图像 Sensor 采集到的数据直接存储到 SDCard上的,因此 Camera 的拍照方向与图像 Sensor 方向一致。

如果横向拿手机拍照,由于正好与 Camera 的拍照方向一致,因此得到的照片是“正确”的;而竖着拿手机拍照的话,图像 Sensor 依然以上面描述的角度在采集图像后存储到 SDCard 上,所以得到的图片因为竖着拿手机正好与图像 Sensor 的方向相差了 90 度。由此,大家应该明白了为什么我们用手机拍出的照片经常需要旋转 90 度才能看到“正确”的画面了吧?

我想上面的介绍应该已经把这个问题讲清楚了,下面介绍一下实际开发中要如何使用设置 Camera 预览方向的 setDisplayOrientation 方法。

实际使用

根据上面的分析,对于横屏应用拍摄时不需要额外设置这个方向,但是对于竖屏应用,则需要调用 setDisplayOrientation(90) 来保证 Camera 的预览方向与 Activity 的方向一致,那么设置了这个函数究竟会不会影响到 Camera 拍照的结果呢。

根据上面的分析,理论上应该是不影响的,因为拍照得到的图片方向是与图像 Sensor 的方向一致的。这个 API 修改的仅仅是 Camera 的预览方向而已,并不会影响到 PreviewCallback 回调、生成的 JPEG 图片和录像文件的方向,这些数据的方向依然会跟图像 Sensor 的方向一致。

Android 相机预览方向和拍照方向相关推荐

  1. android 预览和拍照成像方向不一致,Android相机预览方向深入探究

    原标题:Android相机预览方向深入探究 今日快讯 9月7日,北京市交通委召集各区管理部门和15家共享自行车企业负责人,听取共享自行车投放和管理的意见建议,研究决定并下发通知,暂停在本市新增投放共享 ...

  2. Android相机预览方向

    以前对Camera了解的不是太深入,最近有需求把人脸识别 集成到项目,必然会与Camera打交道,遇到一些坑,与大家分享一下. 一.预览方向   Camera.CameraInfo info = ne ...

  3. Android 相机方向传感,Nexus 5x反向横向传感器修复在Android相机预览...

    我是Android开发中的新手,所以如果我的问题很简单,我会提前道歉.在我的应用程序的一部分,我需要我的后置摄像头的实时预览,所以我创建了一个自定义类,扩展SurfaceView并实现SurfaceH ...

  4. android 相机预览的分辨率,Android开发 Camera2开发_2_预览分辨率或拍照分辨率的计算...

    前言 不管在Camera1或者Camera2在适配不同手机/不同使用场景的情况下都需要计算摄像头里提供的分辨率列表中最合适的那一个分辨率.所以在需要大量机型适配的app,是不建议不经过计算直接自定义分 ...

  5. Android相机预览设置适配及显示方式

    Android相机的部分工作原理. 预览流程 相机预览是Android Camera最常用的功能之一,它是很多功能重要的输入,例如扫码.AR等. 一般而言,相机预览的整体流程,可以通过下图表示: 其中 ...

  6. Android Camera预览角度和拍照保存图片角度学习

    1 Camera预览角度处理 开发Camera过程中会遇到Camera拍照,获取照片后可以上传照片或者展示给用户. Camera的图像数据来源于摄像头硬件的图像传感器,这个图像传感器被固定到手机上后会 ...

  7. Android 相机预览 横屏竖屏 -- 显示

    相机在设备上处于固定位置,无论设备是否 是手机.平板电脑或计算机.当设备方向更改时, 相机方向更改.常见的布局显示比率是 4:3. 对于前置摄像头,图像缓冲区逆时针旋转(从 传感器的自然方向) 对于后 ...

  8. 2022-07-21 Android 相机预览数据转Bitmap优化

    背景 在Android开发中我们有时候会需要拿到相机预览数据转成bitmap自己做处理. 常用方式 在Android API中提供了 一套转换方式: private Bitmap convertBit ...

  9. Android相机预览页面被压缩和拉伸问题

    最近公司要求在原有的项目中添加一个扫码登录的功能,在调试好相机之后,发现相机返回到Surfaceview页面上的预览图片,与我们现实中物品的比例并不相同,在一块正方形的Surfaceview中,预览界 ...

  10. Android相机预览,指定区域显示预览框,在区域内出现人脸进行人脸识别,并抓拍人脸照片存在本地,CameraX,虹软人脸识别

    效果图: 第一种是使用camerax进行预览,android camerax预览官方文档,主要通过imageAnalysis,抓帧进行图片处理,然后通过android自带的图片人脸识别FaceDete ...

最新文章

  1. 利用 socket 获取 tcp 包并解析的问题。
  2. 线性表adt的c语言表达,抽象数据类型定义(ADT)
  3. 【计算机组成原理】双端口RAM和多模块存储器
  4. 五分钟,手撸一个Spring容器!
  5. 转,动态生成的高度自适应
  6. typora html代码无效,Typora优化-适合不懂CSS代码的小白
  7. java 小程序--杨辉三角
  8. 最小化JavaScript代码
  9. HTML编辑器-HTML网页表单可视化在线编辑器插件大全
  10. IBM BladeCenter使用管理模AMM通过虚拟软驱加载驱动_zhanggqe_20120626_v1(zhanggqe@DC)
  11. DCDC电路PCB Layout技巧
  12. 对数log ln lg 的java实现和mysql实现
  13. 基于B站服务器宕机事故,小鸟云聊聊高防云服务器选择技巧
  14. 我们采访了三位学生:他们写代码、95 后、来自大陆和台湾
  15. 《禅与摩托车维修艺术》读后感第一篇
  16. IBM ThinkPad 机子无法开机的解决办法 - 按开机键没有反应 - E49
  17. 每日C语言代码(The fifth day)——求素数
  18. Spring Cloud 极简入门
  19. Spring+SpringMVC+Jsp实现校园二手交易系统
  20. 世界上最快的排序算法——Timsort

热门文章

  1. 计算机组装慕课平台,计算机组装与维修
  2. 爬虫实战——中国天气网数据
  3. 【Word】Word更改默认模板样式——使用自定义模板【以Windows10+Word2019为例】
  4. 树莓派4+lede+移远5G模组RM500Q
  5. AltiumDesigner PCB 文件过大
  6. Windows11 系统打开IE浏览器的方式(完整版)
  7. 什么是嵌入式软件开发?
  8. vue-cli3使用webpack-spritesmith配置雪碧图
  9. Java即时编译器原理解析及实践
  10. Highcharts插件常用配置