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

Zxing2.1扫描取景框变形问题解决

修改竖屏扫描的贴子,2.0之前的都很适用。可是到了2.1,有些贴子的做法可以将扫描框改为竖屏,但是取景框里扫描到的东西是变形的(扁的),本人仔细研究一番,终于解决了这个问题,下面贴出解决办法:

1.修改manifest文件,将CaptureActivity设为portrait
          android:screenOrientation="portrait"

 

2.在DecodeHandler.java文件中,找到decode(byte[],int,int)方法,在buildLuminanceSource调用前,加上如下:

          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; 
          width = height;
          height = tmp;

          data = rotatedData;

 

3.在CameraManager.java中找到getFramingRectInPreview()方法, 替换相应代码

          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;

4.在CameraConfigurationManager.java里找到setDesiredCameraParameters()方法,在
  camera.setParameters(parameters)之前加入

          camera.setDisplayOrientation(90);

5.这一步最关键了,之前有人说是去掉一部分代码,这样会导致扫描的东西变扁。正确的方法应该为:在CameraConfigurationManager.java里找到initFromCameraParameters(Camera camera)方法,改为

          Camera.Parameters parameters = camera.getParameters();
          WindowManager manager = (WindowManager) context .getSystemService(Context.WINDOW_SERVICE);
          Display display = manager.getDefaultDisplay();
          int width = display.getWidth();
          int height = display.getHeight();
          if (width < height) {
               int temp = width;
               width = height;
               height = temp;
          }
          screenResolution = new Point(height, width);
          cameraResolution = findBestPreviewSizeValue(parameters, new Point(width, height));

 

第5步应该这样子:
void initFromCameraParameters(Camera camera) {
Camera.Parameters parameters = camera.getParameters();
previewFormat = parameters.getPreviewFormat();
previewFormatString = parameters.get("preview-format");
WindowManager manager = (WindowManager)context.getSystemService(Context.WINDOW_SERVICE);
Display display = manager.getDefaultDisplay();
int width = display.getWidth();
int height = display.getHeight();
screenResolution = new Point(width,height);
if(width < height)
{
cameraResolution = getCameraResolution(parameters, new Point(height,width));
}else{
cameraResolution = getCameraResolution(parameters, screenResolution);
}
}

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • 最优化理论与方法(袁亚湘 孙文瑜)笔记(二)
  • jawr使用
  • Windows下elasticsearch插入数据报错!
  • 各种demo——CI框架学习
  • [EULAR文摘] 脊柱放射学持续进展是否显著影响关节功能
  • 如何让自己安心学习
  • 经常使用的代码和技巧
  • Java存储区域——JVM札记lt;一个gt;
  • memset函数详解
  • Migration workstation vms to openstack kvm
  • Scala学习笔记(1)-环境搭建
  • Android平台调用Web Service:螺纹的引入
  • sed去掉文件中的空行
  • 前端手札--meta标记篇
  • 小技巧:Windows Server 2012R2 WiFi 无法连接问题
  • 分享一款快速APP功能测试工具
  • 【许晓笛】 EOS 智能合约案例解析(3)
  • Date型的使用
  • Vue.js-Day01
  • Vue官网教程学习过程中值得记录的一些事情
  • web标准化(下)
  • 欢迎参加第二届中国游戏开发者大会
  • 前嗅ForeSpider采集配置界面介绍
  • 区块链技术特点之去中心化特性
  • 如何在 Tornado 中实现 Middleware
  • 少走弯路,给Java 1~5 年程序员的建议
  • 实现简单的正则表达式引擎
  • kubernetes资源对象--ingress
  • 大数据全解:定义、价值及挑战
  • ​LeetCode解法汇总2304. 网格中的最小路径代价
  • #APPINVENTOR学习记录
  • (175)FPGA门控时钟技术
  • (2021|NIPS,扩散,无条件分数估计,条件分数估计)无分类器引导扩散
  • (AngularJS)Angular 控制器之间通信初探
  • (PySpark)RDD实验实战——取最大数出现的次数
  • (二) Windows 下 Sublime Text 3 安装离线插件 Anaconda
  • (附源码)spring boot建达集团公司平台 毕业设计 141538
  • (每日持续更新)信息系统项目管理(第四版)(高级项目管理)考试重点整理 第13章 项目资源管理(七)
  • (转)ABI是什么
  • *_zh_CN.properties 国际化资源文件 struts 防乱码等
  • .[hudsonL@cock.li].mkp勒索病毒数据怎么处理|数据解密恢复
  • .locked1、locked勒索病毒解密方法|勒索病毒解决|勒索病毒恢复|数据库修复
  • .NET 8 中引入新的 IHostedLifecycleService 接口 实现定时任务
  • .NET delegate 委托 、 Event 事件,接口回调
  • .NET Framework杂记
  • .NET/C# 利用 Walterlv.WeakEvents 高性能地定义和使用弱事件
  • .NET6实现破解Modbus poll点表配置文件
  • .netcore 如何获取系统中所有session_如何把百度推广中获取的线索(基木鱼,电话,百度商桥等)同步到企业微信或者企业CRM等企业营销系统中...
  • .net网站发布-允许更新此预编译站点
  • .NET学习教程二——.net基础定义+VS常用设置
  • .secret勒索病毒数据恢复|金蝶、用友、管家婆、OA、速达、ERP等软件数据库恢复
  • [Android学习笔记]ScrollView的使用
  • [Angular 基础] - 指令(directives)
  • [Avalon] Avalon中的Conditional Formatting.
  • [ccc3.0][数字钥匙] UWB配置和使用(二)