2012-12-01 43 views
4

有人能告诉我如何将Zxing库用于增强现实应用程序吗?我知道使用Zxing最简单的方法是通过Intent,但我需要相机视图,所以我不能使用条形码应用程序。在PreviewFrame上使用Zxing库来实现增强现实

我有一个SurfaceHolder.Callback其被添加到主活性和覆盖下面的方法:

@Override 
public void surfaceCreated(SurfaceHolder holder) { 
    mCamera = Camera.open(); 

    try { 
     mCamera.setPreviewDisplay(holder); 
    } catch (IOException e) { 
     Log.d(TAG, "Can not set surface holder"); 
    } 

    mCamera.startPreview(); 

    Parameters parameters = mCamera.getParameters(); 
    parameters.setPreviewSize(1280, 720); 
    parameters.setPictureSize(1280, 720); 
    mCamera.setParameters(parameters); 

    QrCodeReader reader = new QrCodeReader(); 
    mCamera.setPreviewCallback(reader); 
} 

的设置好的图片大小必须是可用的,因为它是在列表parameters.getSupportedPictureSizes()

,并且此方法在QrCodeReader类,它实现PreviewCallback

private Result result; 
private MultiFormatReader reader = new MultiFormatReader(); 
private boolean init = false; 

public QrCodeReader(){ 
     Hashtable<DecodeHintType, Object> hints = new Hashtable<DecodeHintType, 
       Object>(); 
    hints.put(DecodeHintType.TRY_HARDER, Boolean.TRUE); 
    reader.setHints(hints); 
} 

@Override 
public void onPreviewFrame(byte[] data, Camera camera) { 
    PlanarYUVLuminanceSource source = new PlanarYUVLuminanceSource(data, 
      1280, 720, 0, 0, 1280, 720, true); 
    HybridBinarizer hybBin = new HybridBinarizer(source); 
    BinaryBitmap bitmap = new BinaryBitmap(hybBin); 

try { 
     result = reader.decodeWithState(bitmap); 
     Log.d("Result", "Result found!"); 
    } catch (NotFoundException e) { 
     Log.d(TAG, "NotFoundException"); 
    } finally { 
     reader.reset(); 
    } 
} 

的logcat的只显示NotFoundException

+0

ZXING与增强现实有什么关系? – rekire

+0

我需要或多或少的QR码作为标记以实时显示3D对象和信息。 – budderick

+0

在这种情况下,您可能需要下载源代码并尝试提取QR码检测。 – rekire

回答

1

NotFoundException是正常的。如果该框架没有条形码,那就是结果。这并不意味着任何事情都是错误的。继续扫描。

+0

是的,这是真的,但只要我继续扫描,任何时候都没有结果。我打印了一个非常大的QR码,但仍然没有结果... – budderick

+1

上面的解决方案正在工作!谢谢您的回答!有一个愚蠢的错误。我只需要切换图片参数。 – budderick