b2科目四模拟试题多少题驾考考爆了怎么补救
b2科目四模拟试题多少题 驾考考爆了怎么补救

Android ZXing阶梯坑

电脑杂谈  发布时间:2020-03-23 09:15:02  来源:网络整理

android zxing 官网_android zxing 官网_android sdk官网

因为该项目使用了QR码扫描功能,所以我在学校时听说老师说ZXing. 第一个反应是找到ZXing. 在网上搜索后,我发现ZXing是Google开源的,它仍然是相对主流的. 所以我下载了一个包. 其中我所关心的是android. 导入官方程序包并运行它. 这真的很酷. . . 为什么是横屏!!!所以我开始踩坑.

我下载了最新的官方3.2.1版本. 首先,我搜索了如何更改为垂直屏幕(搜索相关内容很容易). 进行更改后,这似乎很简单. 完成起来容易吗?当时我使用2 1920 * 1080分辨率android zxing 官网,没有问题.

当我在480 * 800和1280 * 720分辨率的手机之间切换时遇到问题. 当然,这不是那么简单和漫不经心!

查看源代码,其中在ViewfinderView的onDraw()中实现相框的绘制,onDraw中的第一个方法是

矩形框= cameraManager.getFramingRect();通过这句话,我知道是通过CameraManager

android zxing 官网_android zxing 官网_android sdk官网

getFramingRect方法获取大小. 我们进入CameraManager并像这样重写它

//int width = findDesiredDimensionInRange(screenResolution.x, MIN_FRAME_WIDTH, MAX_FRAME_WIDTH);
//int height = findDesiredDimensionInRange(screenResolution.y, MIN_FRAME_HEIGHT, MAX_FRAME_HEIGHT);
DisplayMetrics metrics = context.getResources().getDisplayMetrics();
int  width = (int)  (metrics.widthPixels * 0.6);
int  height = width;

被注释的部分是原始实现. 我说过,高度和宽度更改为屏幕宽度的0.6倍. 目前,它已经是正常的正方形.

解决方案位于CameraConfigurationManager的initFromCameraParameters方法中

Log.i(TAG,“当前方向的屏幕分辨率: ” + screenResolution);

Point screenResolutionForCamera = new Point();
    screenResolutionForCamera.x = screenResolution.x;
    screenResolutionForCamera.y = screenResolution.y;
    // preview size is always something like 480*320, other 320*480
    if (screenResolution.x < screenResolution.y) {
      screenResolutionForCamera.x = screenResolution.y;
      screenResolutionForCamera.y = screenResolution.x;
}

android zxing 官网_android zxing 官网_android sdk官网

cameraResolution = CameraConfigurationUtils.findBestPreviewSizeValue(参数,screenResolution);

更改为

cameraResolution = CameraConfigurationUtils.findBestPreviewSizeValue(参数,screenResolutionForCamera);

这时,我仍在运行. 查看之前的源代码,它与现在的代码有些不同. 互联网的基本知识是2.x.

在3.2.1中

android zxing 官网_android zxing 官网_android sdk官网

bestPreviewSize = CameraConfigurationUtils.findBestPreviewSizeValue(参数android zxing 官网,screenResolution);

更改

bestPreviewSize = CameraConfigurationUtils.findBestPreviewSizeValue(参数,screenResolutionForCamera);

再次运行程序,发现图像不再被拉起.

就在我以为一切都结束了的时候. 我发现扫描几乎无法识别. 稍后检查后,我发现原因已更改为垂直屏幕.

1. 在CameraManager中的getFramingRectInPreview方法中更改代码

android zxing 官网_android zxing 官网_android sdk官网

//         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;

注释是原始代码,后跟更改后的代码.

2. 在DecodeHandler PlanarYUVLuminanceSource source = activity.getCameraManager()中解码(字节[]数据,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;

我已经解决了之前遇到的问题.

其中,如果仅更改第一步而不更改第二步,则会出现错误

只有第二步而不是第一步将无法识别QR码

您只需要在ViewfinderView中绘制onDraw方法即可. 该方法也非常简单,将不再介绍. 不要忘了进行调整,您可以将自定义属性更改为xml配置,并通过调暗来调整不同的分辨率.

1.png


本文来自电脑杂谈,转载请注明本文网址:
http://www.pc-fly.com/a/shouji/article-149314-1.html

    相关阅读
      发表评论  请自觉遵守互联网相关的政策法规,严禁发布、暴力、反动的言论

      • 曹庄公
        曹庄公

        既然同性如此重口的事都能想到去合法化了

      热点图片
      拼命载入中...