コード例 #1
0
ファイル: ZxingQrcode.java プロジェクト: zhiyongl/jcommon
 private static String decodeQrcode(String filePath) {
   String content = "";
   try {
     BufferedImage image = ImageIO.read(new File(filePath));
     MultiFormatReader reader = new MultiFormatReader();
     LuminanceSource source = new BufferedImageLuminanceSource(image);
     BinaryBitmap bitmap = new BinaryBitmap(new HybridBinarizer(source));
     Result result = reader.decode(bitmap, getDecodeHints());
     content = result.getText();
   } catch (Exception e) {
     e.printStackTrace();
   }
   return content;
 }
コード例 #2
0
  /**
   * Decode the data within the viewfinder rectangle, and time how long it took. For efficiency,
   * reuse the same reader objects from one decode to the next.
   *
   * @param data The YUV preview frame.
   * @param width The width of the preview frame.
   * @param height The height of the preview frame.
   */
  private void decode(byte[] data, int width, int height) {
    //    long start = System.currentTimeMillis();
    //    Result rawResult = null;
    //    PlanarYUVLuminanceSource source = CameraManager.get().buildLuminanceSource(data, width,
    // height);
    //    BinaryBitmap bitmap = new BinaryBitmap(new HybridBinarizer(source));
    //    try {
    //      rawResult = multiFormatReader.decodeWithState(bitmap);
    //    } catch (ReaderException re) {
    //      // continue
    //    } finally {
    //      multiFormatReader.reset();
    //    }
    //
    //    if (rawResult != null) {
    //      long end = System.currentTimeMillis();
    //      Log.d(TAG, "Found barcode (" + (end - start) + " ms):\n" + rawResult.toString());
    //      Message message = Message.obtain(activity.getHandler(), R.id.decode_succeeded,
    // rawResult);
    //      Bundle bundle = new Bundle();
    //      bundle.putParcelable(DecodeThread.BARCODE_BITMAP,
    // source.renderCroppedGreyscaleBitmap());
    //      message.setData(bundle);
    //      //Log.d(TAG, "Sending decode succeeded message...");
    //      message.sendToTarget();
    //    } else {
    //      Message message = Message.obtain(activity.getHandler(), R.id.decode_failed);
    //      message.sendToTarget();
    //    }
    long start = System.currentTimeMillis();
    Result rawResult = null;

    // modify here
    byte[] rotatedData = new byte[data.length];
    for (int y = 0; y < height; y++) {
      for (int x = 0; x < width; x++)
        rotatedData[x * height + height - y - 1] = data[x + y * width];
    }
    int tmp = width; // Here we are swapping, that's the difference to #11
    width = height;
    height = tmp;

    PlanarYUVLuminanceSource source =
        CameraManager.get().buildLuminanceSource(rotatedData, width, height);
    BinaryBitmap bitmap = new BinaryBitmap(new HybridBinarizer(source));
    try {
      rawResult = multiFormatReader.decodeWithState(bitmap);
    } catch (ReaderException re) {
      // continue
    } finally {
      multiFormatReader.reset();
    }

    if (rawResult != null) {
      long end = System.currentTimeMillis();
      Log.d(TAG, "Found barcode (" + (end - start) + " ms):\n" + rawResult.toString());
      Message message = Message.obtain(activity.getHandler(), R.id.decode_succeeded, rawResult);
      Bundle bundle = new Bundle();
      bundle.putParcelable(DecodeThread.BARCODE_BITMAP, source.renderCroppedGreyscaleBitmap());
      message.setData(bundle);
      // Log.d(TAG, "Sending decode succeeded message...");
      message.sendToTarget();
    } else {
      Message message = Message.obtain(activity.getHandler(), R.id.decode_failed);
      message.sendToTarget();
    }
  }
コード例 #3
0
 DecodeHandler(CaptureActivity activity, Hashtable<DecodeHintType, Object> hints) {
   multiFormatReader = new MultiFormatReader();
   multiFormatReader.setHints(hints);
   this.activity = activity;
 }