【问题标题】:zxing lib not smoothly detecting qrcode in portrait modezxing lib 在纵向模式下无法顺利检测 qrcode
【发布时间】:2013-07-16 15:59:09
【问题描述】:

我已成功将ZXing lib 修改为竖屏模式following this post,还将预览矩形修改为如下图所示的正方形。但是我发现实际扫描的矩形只有预览矩形的一半,只有当我将二维码对齐到预览矩形的上半部分时,我才能快速流畅地得到结果,就像 ZXing 演示应用一样。

我检查了 CameraManager 中的 getFramingRect()getFramingRectInPreview() 方法来修改预览矩形,并从 ViewFinderView.onDraw()我可以打印出那两个矩形。但我仍然不知道哪个矩形实际上是用于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)

try&error 后我只能将 previewRect 向下移动 100,向右移动 60。这似乎使检测过程更加顺畅。

【问题讨论】:

  • 使用ZBar库。它非常强大。它会很快给出结果......试试吧......

标签: android zxing


【解决方案1】:

getFramingRect() 相对于屏幕,getFramingRectInPreview() 相对于来自相机的预览图像数据。它们被计算为宽度和高度的比例相同,但如果您修改了代码,那么这部分可能没有正确修改。

【讨论】:

  • 是的,我发现 getFramingRect()getFramingRectInPreview() 返回的比例相似。在这里,我什至将它们都画在屏幕上。我发现它们没有对齐。好奇,所以我也在原来的 ZXing Android 项目中画了这两个矩形,这些也不是对齐的!那么我需要将它们对齐吗?
  • 这是我的两个矩形,以及zxing android中的那两个矩形。(绿色矩形是previewFramingRect)d.pr/i/eCjNd.pr/i/U4DB
  • @Sean Owen 我应该覆盖哪种方法来更改扫描区域。我在 getFramingRectInPreview() 中覆盖扫描区域,但它只更新视图而不是在 Nexus 5x(7.1.1) 中的矩形内扫描。 stackoverflow.com/questions/43973913/…
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-07-09
  • 1970-01-01
  • 2015-08-17
相关资源
最近更新 更多