[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;
}
加黑的部分就是重点,找到缩放比例最合适的一个。
这样就解决了预览扭曲的问题,研究了两天,各种搜索终于解决了。
如果想在应用里添加自己的我二维码扫描功能,可以参照: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二维码扫描图片变形 问题解决方法
- android程序中Zxing二维码扫描图片变形 问题解决方法
- Android实现二维码扫描功能(四)-ZXing识别图片二维码,相册选图
- Zxing图片纵向拉伸问题 Android 二维码扫描
- Android Zxing二维码扫描图片拉伸问题的解决方法
- Android Zxing二维码扫描图片拉伸的解决方法
- Zxing图片拉伸解决 Android 二维码扫描
- android ZXing扫描二维码图片变形
- Zxing图片拉伸解决 Android 二维码扫描
- Zxing图片拉伸解决 Android 二维码扫描
- Android布局总结和Android 9 patch 图片使用
- android 制作9.png图片(转载,最后有自己的总结)
- 条码扫描二维码扫描——ZXing android
- 关于Android读取不同位置(drawable,asset,SDCard)的图片资源的总结
- android开发(17) 扫描二维码 - 调用第三方APK来实现二维码扫描,参考自 开源项目zxing
- 条码扫描二维码扫描——ZXing android 源码简化
- Android内存溢出整理总结 OOM(Out Of Memory) 加载的图片太多或图片过大时经常出现OOM问题
- Android平台利用ZXING生成二维码图片
- Android 图片 OOM问题总结
- Android在网络异步加载图片方式总结