Android解决相机预览拉伸问题

2023-05-16

拉伸的原因

1.主要是由于surfaceview的尺寸和 相机预览尺寸不一致造成的

    @Override
    public void surfaceChanged(SurfaceHolder holder, int format, int width, int height) {
        Log.e("相机--》surfaceview", "width--" + width);
        Log.e("相机--》surfaceview", "height--" + height);
        Log.e("相机--》mCamera", "width--" + mCamera.getParameters().getPreviewSize().width);
        Log.e("相机--》mCamera", "height--" +  mCamera.getParameters().getPreviewSize().height);
    }

log为
相机–》surfaceview: width–720
相机–》surfaceview: height–360
相机–》mCamera: width–1920
相机–》mCamera: height–1080
可以看到 surfaceview宽高比为2/1 但是相机预览尺寸比为16/9,所以造成了拉伸
2.解决办法获取相机预览的支持尺寸,动态设置最接近的尺寸

    @Override
    public void surfaceChanged(SurfaceHolder holder, int format, int width, int height) {
        Camera.Size closelyPreSize = getCloselyPreSize(width, height, mCamera.getParameters().getSupportedPreviewSizes());
        Camera.Parameters parameters = mCamera.getParameters();
        parameters.setPreviewSize(closelyPreSize.width,closelyPreSize.height);
        mCamera.setParameters(parameters);
        Log.e("相机--》surfcaeview", "width--" + width);
        Log.e("相机--》surfcaeview", "height--" + height);
        Log.e("相机--》closelyPreSize", "width--" + closelyPreSize.width);
        Log.e("相机--》closelyPreSize", "height--" + closelyPreSize.height);
        Log.e("相机--》mCamera", "width--" + mCamera.getParameters().getPreviewSize().width);
        Log.e("相机--》mCamera", "height--" +  mCamera.getParameters().getPreviewSize().height);
    }

log为
相机–》surfcaeview: width–720
相机–》surfcaeview: height–360
相机–》closelyPreSize: width–1920
相机–》closelyPreSize: height–960
相机–》mCamera: width–1920
相机–》mCamera: height–960
可以看到此时相机和surfaceview的比例都为2/1,预览就没有了拉伸

3最后附上获取接近比例的方法,

protected Camera.Size getCloselyPreSize(int surfaceWidth, int surfaceHeight,
                                            List<Camera.Size> preSizeList) {

        int ReqTmpWidth;
        int ReqTmpHeight;
        // 当屏幕为垂直的时候需要把宽高值进行调换,保证宽大于高
        if (false) {
            ReqTmpWidth = surfaceHeight;
            ReqTmpHeight = surfaceWidth;
        } else {
            ReqTmpWidth = surfaceWidth;
            ReqTmpHeight = surfaceHeight;
        }
        //先查找preview中是否存在与surfaceview相同宽高的尺寸
        for (Camera.Size size : preSizeList) {
            if ((size.width == ReqTmpWidth) && (size.height == ReqTmpHeight)) {
                return size;
            }
        }

        // 得到与传入的宽高比最接近的size
        float reqRatio = ((float) ReqTmpWidth) / ReqTmpHeight;
        float curRatio, deltaRatio;
        float deltaRatioMin = Float.MAX_VALUE;
        Camera.Size retSize = null;
        for (Camera.Size size : preSizeList) {
            curRatio = ((float) size.width) / size.height;
            deltaRatio = Math.abs(reqRatio - curRatio);
            if (deltaRatio < deltaRatioMin) {
                deltaRatioMin = deltaRatio;
                retSize = size;
            }
        }

        return retSize;

    }

相机开发 学习
https://gitbook.cn/books/5aedb7582b543f6855b437af/index.html

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Android解决相机预览拉伸问题 的相关文章

  • BLE 外设支持 Android-L 示例 [关闭]

    Closed 这个问题需要调试细节 help minimal reproducible example 目前不接受答案 我希望有一个适用于 Android L 的 BLE 外设模式的示例 我的代码给了我奇怪的错误 即广告商太多 这没有任何意
  • startActivity overridePendingTransition 只显示进入动画

    基本上 我遇到的问题是只显示输入幻灯片动画 调用 Activity 不会产生动画 startActivity intent overridePendingTransition R anim right in partly R anim le
  • 有没有办法将搜索栏添加到我的实际首选项屏幕?

    我一直看到有关添加您自己的搜索栏首选项的教程 但它不在我实际的 prefs xml 中 有什么方法可以在我的主偏好设置屏幕中添加一个 或者我必须将其分开 Google 似乎有 2 个滑块首选项 搜索栏首选项 https github com
  • 从 BroadcastReceiver 获取方法来更新 UI

    我正在尝试根据变量的变化更新用户界面BroadcastReceiver 因此 我需要调用一个扩展类的方法 以获取我提到的变量 BroadcastReceiver in MainActivity取决于但我无法以任何方式获得真正的返回值 扩展的
  • 如何忽略 LeakCanary 中的某些类?

    有人能给我一个如何忽略 LeakCanary 中的某些类的有效示例吗 我正在查看这个示例 以忽略 LeakCanary 中第三方库中的某些类 但我不知道将其放在应用程序中的何处 我把它放在我的应用程序类中 但这些变量和方法有错误 isInA
  • 如何在 Android 应用程序中单击按钮时打开 Gmail Compose?

    当我的 Android 应用程序中单击按钮时 我尝试打开 Gmail 撰写屏幕 我需要 Google 提供的 API 密钥吗 或者我需要在按钮 onClickListener 中做什么 任何形式的见解都非常值得赞赏 正如 JeffC 指出的
  • FLAG_ACTIVITY_REORDER_TO_FRONT 被忽略

    我有一个包含项目列表的 FragmentActivity 当应用程序处于后台时 可以推送该项目列表 发生这种情况时 我想创建一个状态栏通知并提醒用户更新 当用户单击通知时 活动应重新排序到前面并显示在屏幕上 同时在列表底部显示新项目 所以我
  • 将图像保存到内部存储器并将出现在图库中

    我搜索了很多与我的问题相关的问题 是否有办法将图像存储在内存中并且它也应该出现在图库中 这是完全有可能的 我以前也这么做过 在将图像保存到内存 或称为应用程序文件夹等 之前 您最好设置Context MODE WORLDREADABLE 虽
  • Android:BATTERY_STATUS_DISCHARGING 和 BATTERY_STATUS_NOT_CHARGING 之间的区别

    我想知道这两个标志之间的区别 BatteryManager BATTERY STATUS DISCHARGING And BatteryManager BATTERY STATUS NOT CHARGING 我开发了一个使用这两个标志的应用
  • Android httpclient文件上传数据损坏和超时问题

    我在 Android 中上传图像时遇到问题 我正在使用 apache httpmime 4 1 lib 代码是这样的 MultipartEntity reqEntity new MultipartEntity HttpMultipartMo
  • Spotify 登录错误 INVALID_CLIENT:无效的重定向 URI android

    我正在制作一个包含 Spotify 集成的应用程序 我点击了此链接https developer spotify com technologies spotify android sdk tutorial https developer s
  • 如何在Android网格视图中设置单元格大小?

    我正在尝试为应用程序制作一个带有大图标的网格视图 但我找不到任何有关修改 Android 上网格布局上的单元格大小的教程 有人可以给我一个例子或相关链接吗 Thanks 就像另一个一样适配器视图 http developer android
  • 有没有办法在多个嵌套的 RecyclerView 之间共享同一个 LayoutManager

    我正在开发一个显示游戏列表的应用程序 在每个游戏的 itemView 内 我还有一个要显示的视频列表 预览和结构如下 我部署了一个RecyclerView作为窗口根视图 然后对于视频 我使用网格样式的RecyclerView来显示 所以这里
  • 无法登录 Google Play 游戏服务

    我在开发者控制台上使用包名称和正确的签名证书设置了我的游戏 并为其创建了排行榜 但没有创建任何成就 然后 我从以下位置下载了示例 Type A Number Challenge 和 BaseGameUtils https developer
  • 动态创建 JSON 对象

    我正在尝试使用以下格式创建 JSON 对象 tableID 1 price 53 payment cash quantity 3 products ID 1 quantity 1 ID 3 quantity 2 我知道如何使用 JSONOb
  • 制作弹跳动画

    我想做图层的弹跳动画 我已经完成了该图层从右到中心的操作 现在我想将其向后移动一点 然后回到中心 这会产生反弹效果 我想我可以用这样的翻译来做到这一点
  • 改造方法调用可能会产生“java.lang.NullPointerException”

    使用 Retrofit 2 3 0 我在 Android Studio 中收到以下消息 有关如何删除此 IDE 错误消息的任何建议 谢谢 来自Response文档 http square github io retrofit 2 x ret
  • 在android中使用BaseActivity的不同活动中的通用标头

    我想编写一次代码并在不同的活动中使用 我创建了一个Base Activity class为了那个原因 此外 不同活动中所有布局的标题都是相同的 我在以下人员的帮助下做到了这一点
  • 如何检查设备上是否安装了文本转语音 (TTS) 的特定语言数据?

    我正在创建一个使用文本转语音的应用程序 我希望用户能够离线使用它 因此我检查设备上是否安装了 TTS 数据 以下是执行此操作的代码 Check tts data is installed Intent checkTTSIntent new
  • Android Espresso - 如果未选中,请单击复选框

    I have onView withId R id check box perform click 但我只想在尚未选中该复选框时执行此操作 我怎样才能在浓缩咖啡中做到这一点 我还想根据其之前的状态来切换复选框 开关 起初 我尝试用此方法打开

随机推荐

  • 一种基于目标检测实现黑花屏分类任务的方案

    转载 xff1a 一种基于目标检测实现黑花屏分类任务的方案 视频花屏检测 叶赫那拉 赫敏的博客 CSDN博客 然而 xff0c 在项目过程中 xff0c 视频帧数据的收集比较困难 xff0c 数据量较少 xff0c 部分花屏和正常屏之间差异
  • 开源工业缺陷数据集汇总,持续更新中(已更新28个)

    转载 xff1a 开源工业缺陷数据集汇总 xff0c 持续更新中 xff08 已更新28个 xff09 知乎 欢迎大家关注我的公众号 xff1a 一刻AI 本文目前汇总了常见的28个开源工业缺陷数据集 xff0c 持续更新中 xff08 欢
  • 带你了解ICCV、ECCV、CVPR三大国际会议

    文章目录 前言 一 ICCV ECCV CVPR是什么 1 ICCV 2 ECCV 3 CVPR 二 三大会链接及论文下载链接 前言 作为刚入门CV的新人 有必要记住计算机视觉方面的三大顶级会议 ICCV CVPR ECCV 统称为ICE
  • 深度学习之卷积神经网络CNN详解

    TensorFlow 卷积层 池化层详解 叠加态的猫 博客园 两种网络层实现的数学细节 https www cnblogs com hellcat p 7850048 html 一 CNN概述 CNN一个牛逼的地方就在于通过感受野和权值共享
  • 深度学习之卷积神经网络CNN 常用的几个模型

    LeNet5 论文 xff1a http yann lecun com exdb publis pdf lecun 01a pdf LeNet 5 xff1a 是Yann LeCun在1998年设计的用于手写数字识别的卷积神经网络 xff0
  • AI Stable Diffusion Prompt参数【二】之 生成效果查验

    AI Stable Diffusion Prompt参数 二 之 生成效果查验 效果国漫风生成参数配置prompt xff1a Negative prompt Model Steps Sampler CFG scale Clip skip
  • batch norm、relu、dropout 等的相对顺序和BN、dropout的几个问题和思考

    总结 xff1a BN和dropout一般不同时使用 xff0c 如果一定要同时使用 xff0c 可以将dropout放置于BN后面 1 batch norm relu dropout 等的相对顺序 Ordering of batch no
  • 推荐系统之ESMM算法精读和实战

    目录 一 背景 二 ESMM模型 2 1 ESMM 模型结构 2 2 ESMM模型特点 2 3 ESMM模型适用场景 三 实验效果 lt
  • 远程桌面连接 提示用户名密码错误的解决办法

    提示 用户名或者密码错误 xff0c 有两种可能 xff1a 1是 用户名 密码可能输入错误 2是 可能你这个用户名暂不支持远程访问 首先解决用户名 密码的问题 xff1a 计算机的命名规则为 计算机 43 账户 的形式 如果您的账户不是A
  • 金融时间序列模型整理

    GARCH模型 https www math pku edu cn teachers lidf course fts ftsnotes html ftsnotes fts garch html 金融时间序列入门 完结篇 ARCH GARCH
  • 工具学习——ubuntu轻量桌面对比

    因为最近要做一些ubuntu上的开发 xff0c 然后使用ssh问题是经常会出现中断 xff0c 虽然可以使用等tmux方法来挂起进程 xff0c 但是感觉不如界面方便 xff0c 然后现在问题来了 xff0c 我的ubuntu服务器是一个
  • JPA自定义VO接受返回结果集(unwrap)

    JPA跟mybitis比较 xff0c 简单的业务搜索是方便的 xff0c 但是设计到复杂的SQL搜索时 xff0c 我们需要自定义SQL 1 64 Query直接写SQL 缺点是无法动态的组装条件 2 JPA的Specification对
  • 快速排序详解-java实现

    一 快速排序 整体过程 xff1a 1 先从数组中找一个数作为基准数 xff0c 2 进行分区 xff0c 分区时大于这个数得全部放到右边 xff0c 小于这个数得全部放到左边 xff0c 等于这个数得全部放到中间 xff08 核心过程 x
  • 应届生应该如何准备校招

    大家好 xff0c 我是羽峰 xff0c 今天要和大家分享的是应届生应该如何准备校招 xff0c 希望该文章对一些今年要找工作的朋友有一些帮助 还是老话 xff0c 我是羽峰 xff0c 希望我所分享的文章能为您及更多的朋友带来帮助 欢迎转
  • mysql提示Can‘t connect to MySQL server on localhost (10061)解决方法

    本文mysql的安装环境为win10 64位 xff0c mysql版本为MySQL5 7 我遇到的问题是 电脑原先安装过mysql xff0c 卸载不干净 xff0c 重装默认以前的用户名和密码 xff0c 然鹅 我不知道用户名和密码 以
  • 哈希表与一致性哈希表

    哈希表定义 散列表 xff08 Hash table xff0c 也叫哈希表 xff09 xff0c 是根据关键码值 Key value 而直接进行访问的数据结构 它通过把关键码映射到表中一个位置来访问记录 xff0c 以加快查找的速度 这
  • 【AI欣赏】将火影忍者推向新高度:StableDiffusion的神奇效果

    AI欣赏 将火影忍者推向新高度 xff1a StableDiffusion的神奇效果 x1f525 你是否曾经梦想过将自己的绘画水平提升到一个新的高度 xff0c 让你的艺术作品能够轻松地与官方制作相媲美呢 xff1f StableDiff
  • 2023-03-06 debian11 最小安装记录

    1 镜像准备 xff0c 根据个人需求下载debian 版本 Debian 获取 Debian 2 上传到VSAN 内容库 我这边是在vm里面安装的 xff0c 就直接上传到内容库备用 xff08 根据个人需求存放 xff09 3 分配虚拟
  • Vue 项目启动报错:http://eslint.org/docs/rules/no-unused-vars

    Vue项目启动时报 xff1a http eslint org docs rules no unused vars 39 vm 39 is assigned a value but never used src navigation nav
  • Android解决相机预览拉伸问题

    拉伸的原因 1 主要是由于surfaceview的尺寸和 相机预览尺寸不一致造成的 64 Override span class token keyword public span span class token keyword void