Android Camera 旋转角度分析

2 篇文章 0 订阅
订阅专栏

概述

  • 相机图像数据都是来自于图像传感器(Image Sensor),相机模组出厂的时候有一个默认的取景方向,一般为以下两种,请留意相机模组中小人的方向
    在这里插入图片描述在这里插入图片描述
  • Sensor 安装默认都是 Sensor 的长边与手机的长边平行
  • 将上述图1的模组装入手机,结果为下图
    在这里插入图片描述
    • 两颗模组不一定如图左右摆放,也可以上下摆放,只要遵循长边对长边即可
    • 此时使用后摄预览或拍照,取景方向是正常的,而手机目前相对自然方向(正常竖屏使用状态)顺时针夹角为90度,这也就是常说的 Sensor orientation 是90度
  • 将上述图2的模组装入手机,结果为下图
    在这里插入图片描述
    • 两颗模组不一定如图左右摆放,也可以上下摆放,只要遵循长边对长边即可
    • 此时使用后摄预览或拍照,若要使取景方向正常,需将手机顺时针旋转180度,此时手机相对自然方向(正常竖屏使用状态)顺时针夹角为270度,这也就是常说的 Sensor orientation 是270度

旋转角度规律

  • 以下说明以 Sensor orientation 90度为例(大多数sensor都是该情况)
  • 屏幕显示旋转角度:Activity#getWindowManager().getDefaultDisplay().getRotation()的值,可以是 ROTATION_0(正常竖屏使用状态)、ROTATION_90(手机向右侧放)、ROTATION_180(手机竖屏倒置)、ROTATION_270(手机向左侧放)
  • 以屏幕角度 ROTATION_180且使用后摄为例,其他情况类比推理
    • 当前情况下图1模组中的小人头部朝向左边,有两种方式判断当前sensor取景后图像方向
      • 简单方式:跟随小人的视角去看实际被拍摄的物体(假设为正常站立的人),所看到的景象是头部向右横置的人,此时若要使看到的图像恢复为正常情况,则需要将图像顺时针旋转270度
      • 复杂方式:sensor扫描方向遵从小人头部左侧顶点向右扫描,当前情况下也就是从左下向上逐行扫描,然后依次存储到内存中,存储为图片的时候是水平从左向右存储,导致存储后的图像是头部向右横置的人,若要使图像被拍摄后为正常情况,则需要将图像顺时针旋转270度

代码实现

  • Camera API1(官方实现)
    public static void setCameraDisplayOrientation(Activity activity, int cameraId, android.hardware.Camera camera) {
    	android.hardware.Camera.CameraInfo info = new android.hardware.Camera.CameraInfo();
        android.hardware.Camera.getCameraInfo(cameraId, info);
        int rotation = activity.getWindowManager().getDefaultDisplay().getRotation();
        int degrees = 0;
        switch (rotation) {
            case Surface.ROTATION_0: degrees = 0; break;
            case Surface.ROTATION_90: degrees = 90; break;
            case Surface.ROTATION_180: degrees = 180; break;
            case Surface.ROTATION_270: degrees = 270; break;
        }
    
        int result;
        if (info.facing == Camera.CameraInfo.CAMERA_FACING_FRONT) {
            result = (info.orientation + degrees) % 360;
            result = (360 - result) % 360;  // compensate the mirror
        } else {  // back-facing
            result = (info.orientation - degrees + 360) % 360;
        }
        camera.setDisplayOrientation(result);
    }
    
  • Camera API2
    • Camera API2 不需要经过任何预览画面方向的矫正,就可以正确现实画面,因为当使用 TextureView 或者 SurfaceView 进行画面预览的时候,系统会自动矫正预览画面的方向
    private static final SparseIntArray ORIENTATIONS = new SparseIntArray();
    
    // Conversion from screen rotation to JPEG orientation.
    static {
        ORIENTATIONS.append(Surface.ROTATION_0, 90);
        ORIENTATIONS.append(Surface.ROTATION_90, 0);
        ORIENTATIONS.append(Surface.ROTATION_180, 270);
        ORIENTATIONS.append(Surface.ROTATION_270, 180);
    }
    
    /**
     * Retrieves the JPEG orientation from the specified screen rotation.
     *
     * @param rotation The screen rotation.
     * @return The JPEG orientation (one of 0, 90, 270, and 360)
     */
    private int getOrientation(int rotation) {
        // Sensor orientation is 90 for most devices, or 270 for some devices (eg. Nexus 5X)
        // We have to take that into account and rotate JPEG properly.
        // For devices with orientation of 90, we simply return our mapping from ORIENTATIONS.
        // For devices with orientation of 270, we need to rotate the JPEG 180 degrees.
        return (ORIENTATIONS.get(rotation) + mSensorOrientation + 270) % 360;
    }
    
    final CaptureRequest.Builder captureBuilder = mCameraDevice.createCaptureRequest(CameraDevice.TEMPLATE_STILL_CAPTURE);
    int rotation = activity.getWindowManager().getDefaultDisplay().getRotation();
    captureBuilder.set(CaptureRequest.JPEG_ORIENTATION, getOrientation(rotation));
    
Android 10.0 camera2关于拍照预览方向旋转90度和拍照图片镜像功能实现
安卓兼职framework和app工程师的博客
03-28 1690
在10.0的系统产品定制化开发中,在camera2的一些图形图像中有些是不正常的功能,比如在拍照和预览画面和手机屏幕不一致, 或者在保存拍照图片的时候发现图片翻转保存了等问题,所以就需要分析下相关的问题来解决实现功能
Android 12.0 mt8788关于摄像头方向旋转功能实现
安卓兼职framework和app工程师的博客
07-13 320
​ 在12.0的系统rom产品开发中,在关于mtk的8788的相关芯片开发中,发现在横屏的时候,camera2摄像头的预览方向旋转90度,所以 就需要校准下关于摄像头的方向,让横屏也能正常预览 ​
androidcamera rotate90 使用相机旋转90度问题
知足常乐
08-10 1万+
由于很多android手机在使用相机的横屏模式的时候总是有图像的preview旋转了90而看起来非常丑的问题,所以只有使用默认的横屏模式来获取图像。 1.在androidManifest.xml中申明只能使用横屏 2.在surface.xml中提供提示用户当时是横
【05】Android时时监测手机的旋转角度 根据旋转角度确定在什么角度加载竖屏布局 在什么时候加载横屏布局
青风百草
07-27 2732
一、场景描述: 近期开发中遇到个问题,就是我们在做横竖屏切换的功能时,横竖屏布局是操作系统去感知的,作为开发员没法确定Activity在什么时候加载横屏布局,在什么时候加载竖屏布局。因此为了找到加载横屏布局与竖屏布局的分界点,我特别监控了屏幕旋转角度,看在什么样的角度会加载横屏布局,在什么样的角度加载竖屏布局。
android自定义相机 前置摄像头拍照,照片旋转180
杰骜不驯
06-26 5065
//自定义相机前置摄像头旋 myCamera = Camera.open(); myCamera .setDisplayOrientation(180); //图片旋转180情况下解决方法 params.set("orientation", "portrait"); params.set("rotation", 180);
Android Camera旋转角度总结
热门推荐
qq_18757521的博客
08-18 1万+
开发过Android自定义相机的朋友们估计都被相机的各种乱七八糟的旋转角度适配坑过,本文将对Camera的各种角度进行解析。 一、适配目标 根据相机旋转角度以及屏幕显示旋转角度选择相机预览数据显示到View上的预览数据显示旋转角度,使眼睛直接看到的真实画面和手机屏幕中显示的画面效果相同。 **相机旋转角度:**相机成像相对于手机的旋转角度,若设备已经安装上了相机,那么该相机相对于设备的旋转角度...
android+录像方向,Android拍照、摄像方向旋转的问题 代码具体解释
weixin_31518415的博客
05-27 424
近期做了个拍照、摄像的应用。遇到了拍照、摄像的图像相对于现实。翻转了90度。原因:相机这个硬件的角度是横屏的角度,所以会出现都是横屏的。1.照相、摄影预览图像的正确角度显 示:public static void setCameraDisplayOrientation(Activity activity,int cameraId, android.hardware.Camera camera) {...
Android相机(Camera)画面旋转角度分析:手机摄像头的“正向”、手机画面自然方向、相机画面的偏转角度
u013914309的博客
05-10 9744
#.概述: 1.如同人眼看东西分上下一样,摄像头也有其“正向”,正常情况下,Android手机后置、前置摄像头的“正向”朝向为手机的“右侧”(默认如此,除非手机厂商修改设置)。 (这里运行代码做过测试发现,前置摄像头也是以右侧为正向,而不是有些资料上说的左侧。) 摄像头直接返回的画面,都是以此方向为作为画面的上方向。若不加处理,直接存储到手机中或展示到View中,画面很可能不“正确”。这里的“正确”指界面存储/展示的图像方向,与摄像头拍摄时人肉眼看到的画面方向一致。 ...
Android编程中调用Camera时预览画面有旋转问题的解决方法
09-03
这段代码首先获取当前屏幕的旋转角度,然后根据摄像头类型(前/后置)计算预览的正确旋转角度,并调用`setDisplayOrientation()`方法。在创建相机预览时,只需调用`setCameraDisplayOrientation()`即可解决旋转问题...
Android 12.0 camera2关于拍照预览方向旋转90度和拍照图片镜像功能实现
最新发布
安卓兼职framework和app工程师的博客
07-17 461
在12.0的系统rom产品定制化开发中,在camera2的一些图形图像中有些是不正常的功能,比如在拍照和预览画面和手机屏幕不一致, 或者在保存拍照图片的时候发现图片翻转保存了等问题,所以就需要分析下相关的问题来解决实现功能
Android 11.0 camera2关于拍照预览方向旋转90度和拍照图片镜像功能实现
安卓兼职framework和app工程师的博客
05-17 931
在11.0的系统rom产品定制化开发中,在camera2的一些图形图像中有些是不正常的功能,比如在拍照和预览画面和手机屏幕不一致, 或者在保存拍照图片的时候发现图片翻转保存了等问题,所以就需要分析下相关的问题来解决实现功能
android旋转180,android旋转手机快速180度,相机预览颠倒
weixin_34183908的博客
05-28 662
我有自定义相机应用程序.当我将手机旋转90度时,相机预览工作正常.但是当我将手机快速旋转180度时,相机预览会颠倒过来.有没有解决方案……这是我的代码如下:public class CustomCameraActivity extends Activity implementsSurfaceHolder.Callback {Camera camera;SurfaceView surfaceView...
camera2录像旋转,Android Camera2预览有时会旋转90度
weixin_30249465的博客
12-21 604
I'm working on some app using Android's Camera2 API. So far I've been able to get a preview displayed within a TextureView. The app is by default in landscape mode. When using the emulator the preview...
android10.0(Q) Camera2 保存图片角度不对和镜像问题
cczhengv
03-09 1289
找到最终保存照片的方法 saveDataToStorage() vendor\mediatek\proprietary\packages\apps\Camera2\common\src\com\mediatek\camera\common\storage\MediaSaver.java 增加 rotatePicture() 方法 private void saveDataToStorage(Request request) { LogHelper.d(TAG, "[saveDataToSt
Android5.1.1 自带Camera2/SnapdragonCamera的apk拍照方向旋转90°
LEAD_SOLO的专栏
07-28 3544
Google默认的Camera2或者SnapdragonCamera拍照后方向自动旋转了270°的问题。
修改MP4文件二进制内容,实现安卓Camera2旋转录制视频画面功能
m0_46132970的博客
07-28 1341
Camera2比起Camera的自定义程度更高一点,比如可以同时输出多个视频流分别用于显示预览画面和录制视频。但是!不同于Camera可以直接使用setOrientation方法直接设置视频旋转角度Camera2没有提供类似的方法。此外,由于MediaRecorder类的一些问题,我使用了自定义的类来对输出的视频流进行处理,也没法使用MediaRecorder类的设置旋转角度方法。 这样的结果就是,使用前置摄像头录制的视频,默认视角是旋转了90°的,不符合正常观看的要求。 为了解决这个问题,我查了不少
android 修改视频方向,什么办法可以手动调整视频或者摄像头方向?
weixin_39537397的博客
05-25 363
[2014-03-03 15:49:15(374)] ---------------------------AnyChat Platform Core SDK Client Log---------------------------[2014-03-03 15:49:15(380)] Load libanychatcore.so success!(V4.9 Build...
android 系统拍照 方向,Android 系统Camera拍照照片旋转
weixin_32566055的博客
05-25 580
读取图片旋转角度,然后根据角度把图片旋转过来。/*** 读取图片属性:旋转角度* @param path 图片绝对路径* @return degree旋转角度*/public static int readPictureDegree(String path) {int degree = 0;try {ExifInterface exifInterface = new ExifInterfa...
安卓相机camera2开发知识点
Only__One的专栏
07-12 1413
关键类使用 TextureView WindowManager CameraManager StreamConfigurationMap MediaRecorder CameraDevice CameraDevice.StateCallback CaptureRequest.Builder CameraCaptureSession CameraCharacteristics StreamConfigurationMap CaptureRequest.Builder ImageRe.
16
原创
11
点赞
69
收藏
14
粉丝
关注
私信
写文章

热门文章

  • Perfetto使用 14894
  • Android10 文件存储 7602
  • Android Camera 旋转角度分析 3173
  • 高通项目刷机 1018
  • Android Studio生成Jar包 776

分类专栏

  • Android 4篇
  • Linux 1篇
  • C++ 1篇
  • 设计模式 1篇
  • 随笔 1篇
  • 工具 5篇
  • C
  • Camera 2篇

最新评论

  • Git基础教程

    CSDN-Ada助手: 哇, 你的文章质量真不错,值得学习!不过这么高质量的文章, 还值得进一步提升, 以下的改进点你可以参考下: (1)使用标准目录。

  • Perfetto使用

    听风细雨眠: adb root;adb remount

  • Perfetto使用

    liyuyitong: 导出文件adb pull data/local/traces 会提示Permission denied没有权限,如何处理

  • Android10 文件存储

    潇洒郎: 亲,有实例吗?光有方法,不会调用呀

  • Android10 文件存储

    Arvin Hu 回复 pcdlrzxx: 博客里的代码里不申请这两个权限可以正常运行的,你再试下 可以检查下targetSdkVersion 是不是大于 28,并且把路径打印出来看下有没有问题

最新文章

  • Android 线程
  • 高通项目刷机
  • Linux 相关知识
2020年8篇
2019年6篇
2018年2篇

目录

目录

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值

天下网标王梅州网站优化培训优化网站的方法精通火24星简述网站优化的16要素有哪些怎么优化搜索网站本地大连网站优化邯郸网站推广优化技巧织梦cms网站怎么优化尼康优化校准文件下载网站罗湖中文网站优化及营销方案麻城外贸网站优化推广做神马网站优化快速排名软件seo目录优化网站排行大悟县网站排名优化代理网站优化行业江苏省泰州市网站关键词优化免费优化网站推广凡科网站如何优化民间工艺品网站优化双鸭山放心的企业网站优化丰台网站内容优化瑞昌seo网站优化杭州规模大的服装行业网站优化荔湾网站优化推广价格医院网站优化方案咸宁工厂网站优化河北家居行业网站优化推广有哪些平度网站优化代理商网站优化公司第三方输入法武清区网络优化网站宝山网站优化香港通过《维护国家安全条例》两大学生合买彩票中奖一人不认账让美丽中国“从细节出发”19岁小伙救下5人后溺亡 多方发声卫健委通报少年有偿捐血浆16次猝死汪小菲曝离婚始末何赛飞追着代拍打雅江山火三名扑火人员牺牲系谣言男子被猫抓伤后确诊“猫抓病”周杰伦一审败诉网易中国拥有亿元资产的家庭达13.3万户315晚会后胖东来又人满为患了高校汽车撞人致3死16伤 司机系学生张家界的山上“长”满了韩国人?张立群任西安交通大学校长手机成瘾是影响睡眠质量重要因素网友洛杉矶偶遇贾玲“重生之我在北大当嫡校长”单亲妈妈陷入热恋 14岁儿子报警倪萍分享减重40斤方法杨倩无缘巴黎奥运考生莫言也上北大硕士复试名单了许家印被限制高消费奥巴马现身唐宁街 黑色着装引猜测专访95后高颜值猪保姆男孩8年未见母亲被告知被遗忘七年后宇文玥被薅头发捞上岸郑州一火锅店爆改成麻辣烫店西双版纳热带植物园回应蜉蝣大爆发沉迷短剧的人就像掉进了杀猪盘当地回应沈阳致3死车祸车主疑毒驾开除党籍5年后 原水城县长再被查凯特王妃现身!外出购物视频曝光初中生遭15人围殴自卫刺伤3人判无罪事业单位女子向同事水杯投不明物质男子被流浪猫绊倒 投喂者赔24万外国人感慨凌晨的中国很安全路边卖淀粉肠阿姨主动出示声明书胖东来员工每周单休无小长假王树国卸任西安交大校长 师生送别小米汽车超级工厂正式揭幕黑马情侣提车了妈妈回应孩子在校撞护栏坠楼校方回应护栏损坏小学生课间坠楼房客欠租失踪 房东直发愁专家建议不必谈骨泥色变老人退休金被冒领16年 金额超20万西藏招商引资投资者子女可当地高考特朗普无法缴纳4.54亿美元罚金浙江一高校内汽车冲撞行人 多人受伤

天下网标王 XML地图 TXT地图 虚拟主机 SEO 网站制作 网站优化