本文主要是介绍[android总结]Zxing二维码扫描图片变形,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
关于使用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;
}
加黑的部分就是重点,找到缩放比例最合适的一个。
这样就解决了预览扭曲的问题,研究了两天,各种搜索终于解决了。
这篇关于[android总结]Zxing二维码扫描图片变形的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!