问题描述:setting菜单wifiQrcode识别不成功
观察扫描区域对焦清晰,图像很清楚,并不存在图像模糊无法识别的问题。
然后尝试用google扫码发现可以成功识别,排除camera成像及对焦问题。
后来和google扫码进行对比,发现两者设置的camera拍照和预览尺寸不同,google应用设置为800*600,而WiFiQrcode设置了一个较大的尺寸,为2104*1536,初步怀疑为算法库对图像的处理问题。
尝试修改如下:
修改如下:
+++ b/LINUX/android/frameworks/base/packages/SettingsLib/src/com/android/settingslib/qrcode/QrCamera.java
@@ -399,6 +399,9 @@ public class QrCamera extends Handler {
/**
* Get best preview size from the list of camera supported preview sizes. Compares the
* preview size and aspect ratio to choose the best one.
*/
private Size getBestPreviewSize(Camera.Parameters parameters) {
final double minRatioDiffPercent = 0.1;
final Size windowSize = mScannerCallback.getViewSize();
final double winRatio = getRatio(windowSize.getWidth(), windowSize.getHeight());
double bestChoiceRatio = 0;
Size bestChoice = new Size(0, 0);
for (Camera.Size size : parameters.getSupportedPreviewSizes()) {
double ratio = getRatio(size.width, size.height);
if (size.height * size.width > bestChoice.getWidth() * bestChoice.getHeight()
&& (Math.abs(bestChoiceRatio - winRatio) / winRatio > minRatioDiffPercent
|| Math.abs(ratio - winRatio) / winRatio <= minRatioDiffPercent)) {
bestChoice = new Size(size.width, size.height);
bestChoiceRatio = getRatio(size.width, size.height);
}
}
++ bestChoice = new Size(800, 600);
++ bestChoiceRatio = getRatio(800, 600);
return bestChoice;
}
@@ -443,6 +446,8 @@ public class QrCamera extends Handler {
private Size getBestPictureSize(Camera.Parameters parameters) {
final Camera.Size previewSize = parameters.getPreviewSize();
final double previewRatio = getRatio(previewSize.width, previewSize.height);
List<Size> bestChoices = new ArrayList<>();
final List<Size> similarChoices = new ArrayList<>();
// Filter by ratio
for (Camera.Size size : parameters.getSupportedPictureSizes()) {
double ratio = getRatio(size.width, size.height);
if (ratio == previewRatio) {
bestChoices.add(new Size(size.width, size.height));
} else if (Math.abs(ratio - previewRatio) < MAX_RATIO_DIFF) {
similarChoices.add(new Size(size.width, size.height));
}
}
bestChoice = size;
}
}
+ bestChoice = new Size(800, 600);
return bestChoice;
}
通过尝试改小图片尺寸,果然问题立马解决。原因是此平台算法库所能处理的图像不能太大。