当前位置: 首页 > ds >正文

android zxing QrCode 库集成转竖屏适配问题

由于zxing 这个库使用比较广泛,所以大家也都遇到这个问题了,甚至最早可以追溯到十年前甚至更早,所以原创是谁已经无法找到,表明转载又需要填原文链接,就腆着脸标个原创了,不过的确不是我的原创,感谢前辈们!(不过说,zxing 这么大个库,这么多人使用,依然到今天都没有适配这个问题,也是令人感到费解啊,不过可能是大家都有解决办法,也就懒得去搞了)

第一:找到 CameraManager 中的 

public synchronized Rect getFramingRectInPreview()

方法里的:

      rect.left = rect.left * cameraResolution.x / screenResolution.x;rect.right = rect.right * cameraResolution.x / screenResolution.x;rect.top = rect.top * cameraResolution.y / screenResolution.y;rect.bottom = rect.bottom * cameraResolution.y / screenResolution.y;

修改为:

      rect.left = rect.left * cameraResolution.y / screenResolution.x;rect.right = rect.right * cameraResolution.y / screenResolution.x;rect.top = rect.top * cameraResolution.x / screenResolution.y;rect.bottom = rect.bottom * cameraResolution.x / screenResolution.y;

第二:找到 CameraConfigurationManager 中的 

void setDesiredCameraParameters(OpenCamera camera, boolean safeMode)

方法,在 theCamera.setParameters(parameters); 方法之前,添加:

theCamera.setDisplayOrientation(90);

第三:找到 DecodeHandler 里的

private void decode(byte[] data, int width, int height)

方法,在

PlanarYUVLuminanceSource source = activity.getCameraManager().buildLuminanceSource(data, width, height);

方法之前,添加:

    byte[] rotatedData = new byte[data.length];for (int y = 0; y < height; y++) {for (int x = 0; x < width; x++)rotatedData[x * height + height - y - 1] = data[x + y * width];}int tmp = width; // Here we are swapping, that's the difference to #11width = height;height = tmp;data = rotatedData;

第四:找到 CameraConfigurationUtils 里的

public static Point findBestPreviewSizeValue(Camera.Parameters parameters, Point screenResolution)

方法,把

double screenAspectRatio = screenResolution.x / (double) screenResolution.y;

改成

        double screenAspectRatio;if(screenResolution.x > screenResolution.y){screenAspectRatio = (double) screenResolution.x / (double) screenResolution.y;}else{screenAspectRatio = (double) screenResolution.y / (double) screenResolution.x;}

最后,如果要提升扫描成功概率,可以修改 CameraManager 中的 MAX_FRAME_WIDTH 属性和MAX_FRAME_HEIGHT 属性;

再次感谢前辈们的贡献!

http://www.xdnf.cn/news/4201.html

相关文章:

  • 餐具瓷器品牌十大排名
  • Linux安装RTL8215网卡驱动
  • FreeRTOS系统CPU使用率统计
  • AutoGPT
  • GESP2024年3月认证C++八级( 第二部分判断题(6-10))
  • 柯西乘积定理(Cauchy Product Theorem)
  • C# 反射
  • [特殊字符] 大模型(LLMs)RAG 版面分析——文本分块面
  • 农经权二轮延包软件—摸底申请表生成
  • 数据库的并发控制
  • nats v2.11.3全新上线!MQTT支持增强、JetStream性能优化、关键BUG修复,构建高效可信消息中间件新时代
  • NV287NV291美光固态闪存NV293NV294
  • Deepseek基础-api key申请及应用(java)、硅基流动api key申请及应用(dify)
  • ThreadLocal源码深度剖析:内存管理与哈希机制
  • Lora原理介绍并用Macbook air超快实现本地微调小模型
  • AI日报 · 2025年5月05日|雅诗兰黛与微软合作成立 AI 创新实验室,加速美妆产品研发与营销
  • 【言语理解】片段阅读之下文推断(6)
  • 设计模式每日硬核训练 Day 18:备忘录模式(Memento Pattern)完整讲解与实战应用
  • 全球化电商平台AWS云架构设计
  • 矩阵置零(中等)
  • 设计模式-基础概念学习总结(继承、多态、虚方法、方法重写)
  • 深入理解块级格式化上下文(BFC)
  • 文本三剑客
  • 字符串匹配 之 拓展 KMP算法(Z算法)
  • 数据集-目标检测系列- 印度人脸 检测数据集 indian face >> DataBall
  • 深度解析:从 GPT-4o“谄媚”到 Deepseek“物理腔”,透视大模型行为模式的底层逻辑与挑战
  • Unity:AddTorque()(增加旋转力矩)
  • uniapp 云开发全集 云数据库
  • JavaScript 笔记 --- part7 --- JS进阶 (part2)
  • 【信息系统项目管理师-论文真题】2008上半年论文详解(包括解题思路和写作要点)