ZXing 扫码 图片变形问题

最新项目中ZXing扫码时候图片变形,网上看看了博客问题已解决了

出现问题的原因:每部手机中设置了好几组预览图片的尺寸、以及实际图片的尺寸。只有当预览图的尺寸比例和实际图片的比例相同的时候就不会出现变形的情况。对于ZXing扫描来说,实际图片的大小就是屏幕的大小,所以我们要从好几组预览图片的尺寸中找到一组最合适的,这样预览的图片就不会变形了。

:具体ZXing的集成参考:http://blog.youkuaiyun.com/xiaanming/article/details/10163203
:具体的问题分析参考:http://www.360doc.com/content/14/0825/15/16319846_404515413.shtml

一:出现问题的代码如下:(其实只需要修改一行代码就可以搞定)

:修改后就是获取,获取x,y比例最相近的一个,从而解决问题
:找到com.mining.app.zxing.camera.CameraConfigurationManager.java修改以下代码
    private static Point findBestPreviewSizeValue(CharSequence previewSizeValueString, Point screenResolution) {
        int bestX = 0;
        int bestY = 0;
        int diff = Integer.MAX_VALUE;
        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;
            }
            /**
             * 注释了再带的  int  newDiff
             */
           // int newDiff = Math.abs(newX - screenResolution.x) + Math.abs(newY - screenResolution.y);
            /**
             * 添加我们寻找最为合适的比例
             * 只需要添加以下一行代码即可
             *             float newDiff = Math.abs(screenResolution.x * 1.0f / newY - screenResolution.y * 1.0f / newX);
             */
            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 = (int) newDiff;
            }

        }

        if (bestX > 0 && bestY > 0) {
            return new Point(bestX, bestY);
        }
        return null;
    }

最后:图片变形的问题得到了解决

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值