代码之家  ›  专栏  ›  技术社区  ›  Jekton

zxing-android中Reader的reset()

  •  0
  • Jekton  · 技术社区  · 9 年前

    我在GitHub上找了好几个小时的zxing存储库。这个 BenchmarkAsyncTask 属于 androidtest 遍历文件路径并连续解码一些图像文件,而无需调用 reset() reader .

    但在读者的评论中。重置,上面写着

    重置解码后实现的任何内部状态,以准备解码 以便重复使用。

    因为我们重用了 multiFormatReader ,我们不应该叫 重置() ?

    1 回复  |  直到 9 年前
        1
  •  0
  •   Pang firemonkey    7 年前

    如果您一步一步地调试ZXing源代码,您将看到reset()对所有读取器都没有任何作用,除了 RSS14读取器 RSS扩展读取器 .

    什么都不做:

    @Override
      public void reset() {
        // do nothing
      }
    

    RSS14Reader.reset():

    @Override
      public void reset() {
        possibleLeftPairs.clear();
        possibleRightPairs.clear();
      }
    

    RSSExpandedReader.reset()

    @Override
      public void reset() {
        this.pairs.clear();
        this.rows.clear();
      }
    

    如果你只想读二维码,那没什么区别。例如:

    String[] fileNames = new String[]{"qrcode-1.jpg", "qrcode-2.jpg"};
    File file = null;
    BufferedImage image = null;
    RGBLuminanceSource source = null;
    BinaryBitmap bitmap = null;
    Result result = null;
    MultiFormatReader reader = new MultiFormatReader();
    
    try {
        for (String fileName : fileNames) {
            file = new File(fileName);
            image = ImageIO.read(file);
            System.out.println(image.getWidth() + ", " + image.getHeight());
            int[] pixels = image.getRGB(0, 0, image.getWidth(), image.getHeight(), null, 0, image.getWidth());
            source = new RGBLuminanceSource(image.getWidth(), image.getHeight(), pixels);
            bitmap = new BinaryBitmap(new HybridBinarizer(source));
            result = reader.decode(bitmap);
            System.out.println(result.getText());
            //reader.reset();
        }
    }
    catch (Exception exception) {
        System.out.println(exception);
    }