当前位置:编程学习 > 网站相关 >>

ZXing改横屏识别为竖屏识别-中间极光线

  好久没上csdn了, 在这里特别想念大家, 最近公司一段时间忙吧,无暇东顾。扫噶,还是直接进入主题吧

     大家都知道 直接从google down下来的 zxing二维码扫描 是 在扫描界面 中间的红线是 竖着的 ,那么怎么能让它 横着 显示呢, 只 因简单几步,轻松搞定

 

      一 点开 com.google.zxing.client.android包 在decode 方法中 修改 代码

PlanarYUVLuminanceSource source = CameraManager.get().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 #11
    width = height;
    height = tmp;
   
   PlanarYUVLuminanceSource source = CameraManager.get().buildLuminanceSource(rotatedData, width, height);
    /**
     * 修改结束
     */

 二  点开包com.google.zxing.client.android.camera 下 CameraManager 中 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;  // 修改前这四行 注释
      /**
       * 修改后 www.zzzyk.com
       */
      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 类中的setDesiredCameraParameters方法中添加一句

  void setDesiredCameraParameters(Camera camera) {
    Camera.Parameters parameters = camera.getParameters();
    Log.d(TAG, "Setting preview size: " + cameraResolution);
    parameters.setPreviewSize(cameraResolution.x, cameraResolution.y);
    setFlash(parameters);
    setZoom(parameters);
    camera.setParameters(parameters);
    camera.setDisplayOrientation(90);// 框框中改横线是 修改的
  }

四 ,在AndroidManifest.xml中,把CaptureActivity的属性android:screenOrientation="landscape"
改为
  android:screenOrientation="portrait"

 

够详细了吧, 开发 二维码扫描的哥们 在搞不出来, 实在不知道说什么好了 。

但是在修改中存在一个问题, 若是 在上述第三个步骤中 加入   camera.setDisplayOrientation(90); 这句话报错时, 给zxing换一个核心包,若是还报错直接换个搞点版本的Android包就OK 了, 建议直接换成 高点的Android 包。

当然加入这句话不错的哥们 就不用管啦, 唉, 为了后人不走弯路,特别奉上。


 

补充:综合编程 , 其他综合 ,
CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,