您的位置:首页 > 移动开发 > Android开发

[android总结]Zxing二维码扫描图片变形

2016-11-14 11:10 337 查看
关于使用ZXing扫描二维码图片变形的问题,晚上有很多种解释,但都是一个模板,经过多种尝试,还是没能解决我的问题。于是就自己研究,不过索性解决了,再次简单分享一下。

如果想在应用里添加自己的我二维码扫描功能,可以参照:http://blog.csdn.net/xiaanming/article/details/10163203  这篇博客描述的很详尽。

首先,你应该知道意见很重要的事,就是为什么预览的照片会变形的问题,主要是参照:http://www.360doc.com/content/14/0825/15/16319846_404515413.shtml   。每部手机中设置了好几组预览图片的尺寸、以及实际图片的尺寸。只有当预览图的尺寸比例和实际图片的比例相同的时候就不会出现变形的情况。

对于ZXing扫描来说,实际图片的大小就是屏幕的大小,所以我们要从好几组预览图片的尺寸中找到一组最合适的,这样预览的图片就不会变形了。

对应的代码如下:

com.mining.app.zxing.camera.CameraConfigurationManager.java

private static Point findBestPreviewSizeValue(CharSequence previewSizeValueString, Point screenResolution) {

    int bestX = 0;

    int bestY = 0;

    float diff = Float.MAX_VALUE;

    Log.d(TAG, "screen point: "+screenResolution);

    for (String previewSize : COMMA_PATTERN.split(previewSizeValueString)) {

      previewSize = previewSize.trim();

      int dimPosition = previewSize.indexOf('x');

      if (dimPosition < 0) {

        Log.w(TAG, "Bad preview-size: " + previewSize);

        continue;

      }

      int newX;

      int newY;

      try {

        newX = Integer.parseInt(previewSize.substring(0, dimPosition));

        newY = Integer.parseInt(previewSize.substring(dimPosition + 1));

      } catch (NumberFormatException nfe) {

        Log.w(TAG, "Bad preview-size: " + previewSize);

        continue;

      }

     

      //caculate best solusion

//      int newDiff = Math.abs(newX - screenResolution.x) + Math.abs(newY - screenResolution.y);

      //获取x,y比例最相近的一个

      float newDiff = Math.abs(screenResolution.x * 1.0f / newY - screenResolution.y * 1.0f / newX);

      if (newDiff == 0) {

        bestX = newX;

        bestY = newY;

        break;

      } else if (newDiff < diff) {

        bestX = newX;

        bestY = newY;

        diff = newDiff;

      }

      Log.w(TAG, "preview-size: " + previewSize +", newDiff: "+newDiff+", diff: "+diff);

    }

    if (bestX > 0 && bestY > 0) {

      return new Point(bestX, bestY);

    }

   

    return null;

  }

加黑的部分就是重点,找到缩放比例最合适的一个。

这样就解决了预览扭曲的问题,研究了两天,各种搜索终于解决了。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: