在这篇文章之后,我已经成功地将 ZXing lib 修改为纵向模式,还将预览矩形修改为下面的 img 之类的正方形。但我发现实际扫描的矩形只有预览矩形的一半大小,只有当我将 qrcode 对齐到预览矩形的上半部分时,我才能快速流畅地获得结果,就像 ZXing 演示应用一样。
我检查了CameraManager中的getFramingRect()和getFramingRectInPreview()方法来修改预览矩形,并且从 ViewFinderView.onDraw() 我可以打印出这两个矩形。但我仍然不知道哪个 rect 实际上是DETECTING。是frame还是previewFrame?或者是其他东西?我怎样才能将我的预览方形矩形与检测矩形对齐???
@Override
public void onDraw(Canvas canvas) {
if (cameraManager == null) {
return; // not ready yet, early draw before done configuring
}
Rect frame = cameraManager.getFramingRect();
Rect previewFrame = cameraManager.getFramingRectInPreview();
if (frame == null || previewFrame == null) {
return;
}
int width = canvas.getWidth();
int height = canvas.getHeight();
Log.d(TAG, "@ FramingRect : " + frame.left + "/" + frame.top + "/" + frame.right + "/" + frame.bottom);
Log.d(TAG, "@ Preview FramingRect : " +
previewFrame.left + "/" + previewFrame.top + "/" + previewFrame.right + "/" + previewFrame.bottom);
getFramingRectInPreview()
每当我在此异常中调整 previewRect时:
java.lang.IllegalArgumentException: Crop rectangle does not fit within image data.
at com.google.zxing.PlanarYUVLuminanceSource.<init>(PlanarYUVLuminanceSource.java:50)
at com.google.zxing.client.android.camera.CameraManager.buildLuminanceSource(CameraManager.java:339)
at com.google.zxing.client.android.DecodeHandler.decode(DecodeHandler.java:87)
at com.google.zxing.client.android.DecodeHandler.handleMessage(DecodeHandler.java:55)
at android.os.Handler.dispatchMessage(Handler.java:99)
at android.os.Looper.loop(Looper.java:137)
at com.google.zxing.client.android.DecodeThread.run(DecodeThread.java:104)
在尝试和错误之后,我只能将 previewRect 向下移动 100,向右移动 60。这似乎使检测过程更加顺畅。