条形码扫描图库中的图片

时间:2014-04-24 06:42:39

标签: android zxing barcode-scanner

关于我想要实现的目标的一点想法:

  1. 从相机拍摄图像或从图库中选择图片
  2. 将结果图像加载到ImageView(可能)
  3. 现在,在步骤1和步骤2之间,我想扫描步骤1中图像上的条形码。

    根据扫描结果:

    • 如果成功,请显示Toast条形码信息,例如格式和内容。
    • 如果没有,请显示Toast告知该图片没有任何条形码。

    我探索了ZXing(在某种程度上)以实现我的目标。

    但我无法得到的是:

    1. 如何从图库中扫描图片上的条形码?
    2. 如何使用内容和格式信息成功完成条形码扫描后返回图片?

1 个答案:

答案 0 :(得分:1)

我终于有办法让它与zxing条码扫描器库一起工作。

从任何已保存的图库或文件夹中获取图片时,请记住几件事情,

  • 图像质量应该很好。
  • 不应旋转图像。(有时会导致问题)。
  • 最后,确保zxing条形码扫描仪支持您扫描的条形码。

这是代码。

try {
         Bitmap bMap = BitmapFactory.decodeResource(MyActivity.this.getResources(),
         R.drawable.barcode_dummy /* ANY DUMMY IMAGE WITH BARCODE */);

        int[] intArray = new int[bMap.getWidth() * bMap.getHeight()];
        // copy pixel data from the Bitmap into the 'intArray' array
        bMap.getPixels(intArray, 0, bMap.getWidth(), 0, 0, bMap.getWidth(),
                bMap.getHeight());

        LuminanceSource source = new RGBLuminanceSource(bMap.getWidth(),
                bMap.getHeight(), intArray);
        BinaryBitmap bitmap = new BinaryBitmap(new HybridBinarizer(source));

        Reader reader = new MultiFormatReader();// use this otherwise
                                                // ChecksumException
        try {
            Hashtable<DecodeHintType, Object> decodeHints = new Hashtable<DecodeHintType, Object>();
            decodeHints.put(DecodeHintType.TRY_HARDER, Boolean.TRUE);
            decodeHints.put(DecodeHintType.PURE_BARCODE, Boolean.TRUE);

            Result result = reader.decode(bitmap, decodeHints);
                Utility.ShowToastShort(MyActivity.this,
                        result.getText());

        } catch (NotFoundException e) {
            e.printStackTrace();
        } catch (ChecksumException e) {
            e.printStackTrace();
        } catch (FormatException e) {
            e.printStackTrace();
        } catch (NullPointerException e) {
            e.printStackTrace();
        }

希望它有所帮助。它对我有用。谢谢