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

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.dtcms.com/a/173278.html

相关文章:

  • 访问者模式(Visitor Pattern)
  • 【Springboot知识】Springboot计划任务Schedule详解
  • Dify - Embedding Rerank
  • 第六章 流量特征分析-蚁剑流量分析(玄机靶场系列)
  • 基于YOLOv8与LSKNet的遥感图像旋转目标检测新框架 —LSKblock注意力机制在小目标检测中的性能优化与SOTA探索
  • TCP/IP, CAN,LIN,SOCKET
  • 学习黑客Nmap 实战
  • Python字符串全面指南:从基础到高级操作
  • 代码随想录算法训练营Day45
  • MCP原理详解及实战案例(动嘴出UI稿、3D建模)
  • GESP2024年3月认证C++八级( 第二部分判断题(6-10))
  • 用Python打造自己的专属命令行工具
  • AI融合SEO关键词优化
  • BC35 判断字母
  • 【AI论文】KeySync:一种在高分辨率下实现无泄漏唇形同步的稳健方法
  • 【day03】简写单词 | dd爱框框 | 除2!
  • WebAssembly(Wasm):现代Web开发的超级加速器
  • 网星安全AWS攻防方案,重磅发布!
  • PCI/PCIe Error?设备总线?Bus?
  • Jmeter性能测试工具使用介绍
  • item_get_app_pro - 获得淘宝app商品详情原数据操作流程
  • Baklib的数字化内容管理核心是什么?
  • n8n工作流自动化平台:生成图文并茂的分析报告之Merge节点详细说明
  • CSS兼容性:挑战与策略
  • 【Leetcode 每日一题 - 补卡】1007. 行相等的最少多米诺旋转
  • 「Mac畅玩AIGC与多模态20」开发篇16 - 使用结构化输出字段控制后续流程示例
  • Three.js + React 实战系列 - 客户评价区细解教程 Clients 组件✨(回答式评价 + 评分星级)
  • ​亚马逊云服务器技术全景解析:从基础架构到行业赋能​
  • JVM——Java对象的内存布局
  • 价格识别策略思路