Camera预览旋转设置

156 篇文章 3 订阅
订阅专栏
138 篇文章 4 订阅
订阅专栏

实现效果如下:
在这里插入图片描述
点击4个按钮分别实现4个角度的旋转。

  1. 目标版本设置为21,这样不需要动态申请权限。

  2. 在清单文件申请CAMERA权限

  3. 布局

    <?xml version="1.0" encoding="utf-8"?>
    <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
        xmlns:tools="http://schemas.android.com/tools"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        tools:context=".MainActivity">
    
        <FrameLayout
            android:id="@+id/fl_container"
            android:layout_width="match_parent"
            android:layout_height="match_parent" />
    
        <LinearLayout
            android:layout_width="match_parent"
            android:orientation="horizontal"
            android:layout_height="wrap_content"
            android:layout_alignParentBottom="true">
    
            <View
                android:layout_width="6dp"
                android:layout_height="0dp"/>
    
            <Button
                android:layout_width="0dp"
                android:layout_height="wrap_content"
                android:layout_weight="1"
                android:id="@+id/btn_0"
                android:onClick="onClick"
                android:text="0"/>
    
            <View
                android:layout_width="6dp"
                android:layout_height="0dp"/>
    
            <Button
                android:layout_width="0dp"
                android:layout_height="wrap_content"
                android:layout_weight="1"
                android:id="@+id/btn_90"
                android:onClick="onClick"
                android:text="90"/>
    
            <View
                android:layout_width="6dp"
                android:layout_height="0dp"/>
    
            <Button
                android:layout_width="0dp"
                android:layout_height="wrap_content"
                android:layout_weight="1"
                android:onClick="onClick"
                android:id="@+id/btn_180"
                android:text="180"/>
    
            <View
                android:layout_width="6dp"
                android:layout_height="0dp"/>
    
            <Button
                android:layout_width="0dp"
                android:layout_height="wrap_content"
                android:layout_weight="1"
                android:onClick="onClick"
                android:id="@+id/btn_270"
                android:text="270"/>
    
            <View
                android:layout_width="6dp"
                android:layout_height="0dp"/>
    
        </LinearLayout>
    
    </RelativeLayout>
    
  4. 代码

    class MainActivity : AppCompatActivity() {
    
        private var cameraView: FrameLayout? = null
        private var camera: Camera? = null
        private lateinit var cameraContainer: ViewGroup
    
        override fun onCreate(savedInstanceState: Bundle?) {
            super.onCreate(savedInstanceState)
            setContentView(R.layout.activity_main)
            cameraContainer = findViewById(R.id.fl_container)
        }
    
        override fun onResume() {
            super.onResume()
            startPreview()
        }
    
        override fun onPause() {
            super.onPause()
            stopPreview()
        }
    
        private fun startPreview() {
            val surfaceView = SurfaceView(this)
            surfaceView.holder.addCallback(object : SurfaceHolder.Callback {
                override fun surfaceCreated(holder: SurfaceHolder) {
                    camera = Camera.open()
                    camera?.setPreviewDisplay(holder)
                    camera?.setDisplayOrientation(0)
                    camera?.startPreview()
                }
    
                override fun surfaceDestroyed(holder: SurfaceHolder) {
    
                }
    
                override fun surfaceChanged(holder: SurfaceHolder, format: Int, width: Int, height: Int) {}
            })
            cameraView = FrameLayout(this).apply { addView(surfaceView) }
            cameraContainer.addView(cameraView)
        }
    
        private fun stopPreview() {
            camera?.stopPreview()
            camera?.release()
            camera = null
    
            cameraView?.removeAllViews()
            (cameraView?.parent as? ViewGroup)?.removeAllViews()
            cameraView = null
        }
    
        fun onClick(view: View) {
            when (view.id) {
                R.id.btn_0 ->   camera?.setDisplayOrientation(0)
                R.id.btn_90 ->  camera?.setDisplayOrientation(90)
                R.id.btn_180 -> camera?.setDisplayOrientation(180)
                R.id.btn_270 -> camera?.setDisplayOrientation(270)
            }
        }
    
    }
    
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的一些图形图像中有些是不正常的功能,比如在拍照和预览画面和手机屏幕不一致, 或者在保存拍照图片的时候发现图片翻转保存了等问题,所以就需要分析下相关的问题来解决实现功能
Qt摄像头的翻转
lanxiaziyi的专栏
11-24 3123
最近在研究Qt摄像头, Qt5.2.0 支持的分辨率只有 640*480
Android编程中调用Camera预览画面有旋转问题的解决方法
09-03
主要介绍了Android编程中调用Camera预览画面有旋转问题的解决方法,涉及Android针对Camera调用摄像头源码部分的相关修改技巧,需要的朋友可以参考下
【鸿蒙南向开发】OpenHarmony如何切换横竖屏?
HarmonyOS_666的博客
07-28 846
本文带大家使用对应的接口,在Stage模型和FA模型下完成了横竖屏的切换。其中还涉及到了上下文的获取:Stage模型用(getContext(this) as any),FA模型(featureAbility.getContext()),大家可以在此基础上利用生命周期的回调,在合适的地方完成对应的操作。
Android Camera APP预览画面镜像及旋转处理
netwalk的专栏
06-05 844
Android Camera APP开发调试中经常会遇到预览画面镜像或者旋转处理。网上可以找到很多种方案,本文介绍最简单的实现方案,来达到镜像预览画面和画面旋转的效果。
关于Android手机拍照预览、剪裁界面出现照片九十度旋转的问题
u013214588的博客
09-10 2754
案场还原: 最近做的项目,测试机小米6X及本人的努比亚Z11测试拍照环节均正常,但在领导的三星手机及Oppo FindX上就出现了奇葩现象,拍照完预览照片、剪裁照片出现了九十度的旋转,如果这时候你用模拟器,比如Genymotion也能发现此问题,预览及剪裁出现旋转。 原因排查: 通过搜索大量墙里墙内资料,原因大概总结为以下几点,自我理解,若有不对,还望指正: Android原生系统设...
Qt笔记_相机QCamera
HLdongdong的博客
10-11 1013
相机
Camera预览方向例子
03-09
用作查看camera默认的预览方向,以及做出对应调整。 此demo写的较为简单,只包含了如何预览,以及预览方向的一些问题,临时写的Demo,不喜勿喷
Android 10.0 mtk平板camera2横屏预览旋转90度横屏保存录像旋转90度功能实现
最新发布
安卓兼职framework和app工程师的博客
09-12 446
在10.0的系统rom定制化开发中,在进行一些平板等默认横屏的设备开发的过程中,需要在进入camera2的 时候,默认预览图像也是需要横屏显示的,在上一篇已经实现了横屏预览功能,然后发现横屏预览后,点击录像保存的视频 依然是竖屏的,所以说同样需要将视频也保存为横屏视频了,所以就需要看下mtk的camera2的相关横屏保存视频功能, 如何实现实现横屏保存视频功能
android camera2预览方向,Android Camera2预览偶尔会旋转90度(示例代码)
weixin_33648811的博客
05-26 3860
我正在使用Android的Camera2 API开发一些应用程序。到目前为止,我已经能够在TextureView中显示预览。该应用程序默认为横向模式。使用模拟器时,预览将显示为颠倒。在我的物理Nexus 5上,预览通常正确显示(横向,而不是颠倒),但有时它会旋转90度,但仍然会拉伸到屏幕的尺寸。我认为应该很容易,并认为以下代码将返回有关当前方向的必要信息:// display rotationge...
Qt案例之利用QImage类实现对图像的基本操作(图像显示、图像缩放、图像旋转).zip
02-12
Qt案例,利用QImage类实现对图像的基本操作,包括图像显示、图像缩放、图像旋转等,与滑动条配合使用,可参考文章:https://blog.csdn.net/didi_ya/article/details/122897518
Qt使用Qcamera类操作摄像头
08-15
完成了摄像头的操作,并完成拍照保存照片的功能,源码简单方便学习
【Qt】使用QCamera获取摄像头,并使用图像视图框架QGraphics*来显示
04-25
使用QCamera获取摄像头,并使用图像视图框架来显示 QGraphicsVideoItem QGraphicsScene QGraphicsView
Qt使用QCamera调用摄像头
09-05
Qt使用QCamera调用摄像头,用Qlabel显示摄像头图像. 主要在mainwindow.cpp。较为简单,适合新手学习Qt使用QCamera调用摄像头、
使用Camera类, 旋转90预览图像的问题
yes1cpp的专栏
02-26 9478
今天尝试用Camera对象获取摄像头拍照,预览时候发现图片逆时针旋转90度。 解决方法: 一、 原来Camera对象假定方向是水平或者横向模式,旋转修正最简单的方法是以横向模式显示,可以在Activity的onCreate方法中添加y一行代码。 setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE);
camera 旋转的故事
shen332401890的专栏
02-07 3264
不断总结中 实践+经验,总结,非纯理论性总结。只是对最近工作的经验型总结。 经过三天连续的camera第三方旋转,头大,眼花。还把李龙会搞疯了。嗯 我表示很满足。OK,开始正题。 根据这几天的测试结果。我得到如下结论。 1, 首先 修改这里,会导致收驱动层就是sensor中的  XXX_v4l2.c文件  这里面是真正的驱动,这里改寄存器的地址,做到真正的旋转。这里一改。所
Android 从零开发一个简易的相机App
朱豪凯的博客
08-22 5985
Android调用相机可以使用Camera1、Camera2和CameraX,分别对这几种方案进行了介绍,并介绍了相机App的通知相册更新,跳转相册,左右滑动界面切换拍照/录像,相机切换时候的高斯模糊虚化效果,相机切换的3D效果的实现逻辑...............
MTK Camera广角左右翻转
liaokesen168的博客
09-04 447
mtk camera 4:3的预览反向,其他比例正常,发现是camera预览分辨率没有配置APK设置的分辨率。 MTK android 9.0分辨率配置如下转载博客https://blog.csdn.net/zimu_2080/article/details/86647525,感谢下面博主的分享。 版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接...
camera2 预览旋转
06-07
在使用 Camera2 进行预览时,可以通过设置 TextureView 或 SurfaceView 的旋转来实现预览旋转。具体操作步骤如下: 1. 获取设备的方向信息: ``` int rotation = getWindowManager().getDefaultDisplay().getRotation(); ``` 2. 根据设备方向信息设置 TextureView 或 SurfaceView 的旋转: ``` 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; } textureView.setTransform(new Matrix()); textureView.setScaleX(1); textureView.setScaleY(1); textureView.setRotation(degrees); ``` 3. 根据摄像头的方向信息,设置预览数据的旋转角度: ``` int sensorOrientation = cameraCharacteristics.get(CameraCharacteristics.SENSOR_ORIENTATION); int rotationCompensation = (sensorOrientation - degrees + 360) % 360; captureRequestBuilder.set(CaptureRequest.JPEG_ORIENTATION, rotationCompensation); ``` 这样可以实现 Camera2 预览旋转
写文章

热门文章

  • 一看就懂的i++和++i详解 51449
  • Linux切换到root用户 46741
  • 查看二进制文件 17728
  • android中的ping命令使用 16823
  • Kotlin中的List排序 16204

分类专栏

  • Kotlin 22篇
  • Linux 17篇
  • JavaEE 2篇
  • 图形音视频 5篇
  • 音视频开发 2篇
  • 工具 2篇
  • Gradle 1篇
  • C 4篇
  • Windows 2篇
  • Bug 2篇
  • markdown左侧菜单 1篇
  • markdown左侧目录 1篇
  • markdown菜单 1篇
  • Git 1篇
  • Github
  • Github提交失败
  • Network 1篇
  • android网络连接 1篇
  • android 156篇
  • java 65篇
  • 个人日记 5篇
  • 视频教程
  • 软件开发 7篇
  • 经验知识分享 138篇

最新评论

  • Android弹出通知

    QiMenger: context要指定是activity才能在前台弹出通知

  • Glide基本使用以及加载https图片(配合OkHttp实现)

    Du_ioi: 这一个函数:override fun registerComponents(context: Context, glide: Glide, registry: Registry) { val builder = OkHttpClient.Builder() builder.sslSocketFactory(sSLSocketFactory, trustManager) builder.hostnameVerifier { _, _ -> true } val okHttpClient = builder.build() registry.replace(GlideUrl::class.java, InputStream::class.java, OkHttpUrlLoader.Factory(okHttpClient)) } 给builder设置上这一句:builder.hostnameVerifier { _, _ -> true }

  • 为什么InputStream的read()返回-1可以表示结束

    android_cai_niao: 再简单点理解就是:inputStream.read()返回的数据只有可能是 -1、0、正整数,不可能会有其它的负数了,为什么会这样,因为 byte & 0xff 之后的结果只能是 0 或 正整数,不可能是负数,所以用任何一个负数都可以表示流结束了,但是编程语言设计都是使用 -1 来表示结束。

  • 为什么InputStream的read()返回-1可以表示结束

    android_cai_niao: 确实是基础问题,你要掌握好 & 运算就能理解了,把一个byte值 & 0xff之后就变成了一个int值了,且这个int值不可能是负数,所以当流结束时,可以使用一个int类型的-1表示没数据了。

  • 为什么InputStream的read()返回-1可以表示结束

    小鸭子tt: 还是有点没看懂,是我基础太差

大家在看

  • HTML学习第一天 728
  • 渗透神器Kali Linux系统官方版的安装教程(超详细,保姆级教程) 1
  • 图文深入理解Oracle DB实例管理 567
  • Java项目实战II基于Java+Spring Boot+MySQL的读书笔记共享平台(开发文档+数据库+源码) 747
  • CF 231 E Cactus 题解(仙人掌图上找环) 728

最新文章

  • Kotlin中$符号的转义
  • 安装WMware和Ubuntu并使用xShell连接
  • 判断是否连接了wifi(坑、坑、坑)
2024
09月 1篇
08月 1篇
07月 1篇
05月 7篇
04月 5篇
03月 10篇
02月 9篇
01月 6篇
2023年34篇
2022年38篇
2021年108篇
2020年61篇
2019年5篇
2015年13篇

目录

目录

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

android_cai_niao

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或 充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值

天下网标王邛崃企业网站优化公司wap网站优化首页怎么优化网站漳州网站优化找哪家康佳网站优化专员实训表网站怎么做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 网站制作 网站优化