当前位置: 首页 > 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 属性;

再次感谢前辈们的贡献!

相关文章:

  • 访问者模式(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性能测试工具使用介绍
  • 北美票房|“雷霆”开画票房比“美队4”低,但各方都能接受
  • 特朗普:对所有在国外制作进入美国的电影征收100%关税
  • 印度扩大对巴措施:封锁巴基斯坦名人账号、热门影像平台社媒
  • 10家A股农商行一季报:净利均实现增长,常熟银行营收、净利增速领跑
  • 新华社评论员:在推进中国式现代化的宽广舞台上绽放青春光彩
  • “五一”假期国铁集团计划日均开行旅客列车超1.2万列