类com.google.zxing.RGBLuminanceSource源码实例Demo

下面列出了怎么用com.google.zxing.RGBLuminanceSource的API类实例代码及写法,或者点击链接到github查看源代码。

源代码1 项目: react-native-barcode   文件: ZXingDecoder.java
@Override
public ReadableMap decodeRGBBitmap(Bitmap bitmap) {
    int width = bitmap.getWidth();
    int height = bitmap.getHeight();
    int[] pixels = new int[width * height];
    bitmap.getPixels(pixels, 0, width, 0, 0, width, height);
    bitmap.recycle();

    RGBLuminanceSource source = new RGBLuminanceSource(width, height, pixels);
    BinaryBitmap bBitmap = new BinaryBitmap(new HybridBinarizer(source));
    WritableMap result = null;
    try {
        Result decodeResult = mReader.decode(bBitmap, mHints);
        result = Arguments.createMap();
        result.putInt("format", symbolToFormat(decodeResult.getBarcodeFormat()));
        result.putString("content", decodeResult.getText());
    } catch (NotFoundException ignored) {
    }
    return result;
}
 
源代码2 项目: myapplication   文件: DecodeUtils.java
public Result decodeWithZxing(Bitmap bitmap) {
    MultiFormatReader multiFormatReader = new MultiFormatReader();
    multiFormatReader.setHints(changeZXingDecodeDataMode());

    int width = bitmap.getWidth();
    int height = bitmap.getHeight();
    int[] pixels = new int[width * height];
    bitmap.getPixels(pixels, 0, width, 0, 0, width, height);

    Result rawResult = null;
    RGBLuminanceSource source = new RGBLuminanceSource(width, height, pixels);

    BinaryBitmap binaryBitmap = new BinaryBitmap(new HybridBinarizer(source));
    try {
        rawResult = multiFormatReader.decodeWithState(binaryBitmap);
    } catch (ReaderException re) {
        // continue
    } finally {
        multiFormatReader.reset();
    }

    return rawResult;
}
 
源代码3 项目: SimplifyReader   文件: DecodeUtils.java
public String decodeWithZxing(Bitmap bitmap) {
    MultiFormatReader multiFormatReader = new MultiFormatReader();
    multiFormatReader.setHints(changeZXingDecodeDataMode());

    int width = bitmap.getWidth();
    int height = bitmap.getHeight();
    int[] pixels = new int[width * height];
    bitmap.getPixels(pixels, 0, width, 0, 0, width, height);

    Result rawResult = null;
    RGBLuminanceSource source = new RGBLuminanceSource(width, height, pixels);

    if (source != null) {
        BinaryBitmap binaryBitmap = new BinaryBitmap(new HybridBinarizer(source));
        try {
            rawResult = multiFormatReader.decodeWithState(binaryBitmap);
        } catch (ReaderException re) {
            // continue
        } finally {
            multiFormatReader.reset();
        }
    }

    return rawResult != null ? rawResult.getText() : null;
}
 
源代码4 项目: ZxingSupport   文件: QRCodeDecode.java
public String decode(final Bitmap image){
    final long start = System.currentTimeMillis();
    final int width = image.getWidth(), height = image.getHeight();
    final int[] pixels = new int[width * height];
    image.getPixels(pixels, 0, width, 0, 0, width, height);
    final RGBLuminanceSource source = new RGBLuminanceSource(width, height, pixels);
    final BinaryBitmap bitmap = new BinaryBitmap(new HybridBinarizer(source));
    try {
        Result rawResult = mMultiFormatReader.decodeWithState(bitmap);
        final long end = System.currentTimeMillis();
        Log.d(TAG, "QRCode decode in " + (end - start) + "ms");
        Log.d(TAG, rawResult.toString());
        return rawResult.getText();
    } catch (NotFoundException re) {
        Log.w(TAG, re);
        return null;
    }finally {
        mMultiFormatReader.reset();
    }
}
 
源代码5 项目: StarBarcode   文件: AbsCodec.java
/**
 * 使用RGB解析bitmap
 *
 * @param data
 * @param width
 * @param height
 * @param hintTypeMap
 * @return
 */
private Result decodeFromRGB(int[] data, int width, int height, Map<DecodeHintType, ?> hintTypeMap) {
    RGBLuminanceSource source = new RGBLuminanceSource(width, height, data);
    BinaryBitmap binaryBitmap = new BinaryBitmap(new HybridBinarizer(source));
    try {
        return new MultiFormatReader().decode(binaryBitmap, hintTypeMap);
    } catch (NotFoundException e) {
        e.printStackTrace();
    }
    return null;
}
 
源代码6 项目: DevUtils   文件: ZXingQRCodeUtils.java
/**
 * 解析二维码图片
 * @param bitmap         待解析的二维码图片
 * @param qrScanCallBack 解析结果回调
 */
public static void decodeQRCode(final Bitmap bitmap, final QRScanCallBack qrScanCallBack) {
    if (bitmap == null) {
        if (qrScanCallBack != null) {
            qrScanCallBack.onResult(false, null, new Exception("bitmap is null"));
        }
        return;
    }
    // 开始解析
    DevThreadManager.getInstance(5).execute(new Runnable() {
        @Override
        public void run() {
            try {
                int width = bitmap.getWidth();
                int height = bitmap.getHeight();
                int[] pixels = new int[width * height];
                bitmap.getPixels(pixels, 0, width, 0, 0, width, height);
                RGBLuminanceSource source = new RGBLuminanceSource(width, height, pixels);
                Result result = new MultiFormatReader().decode(new BinaryBitmap(new HybridBinarizer(source)), DECODE_HINTS);
                // 触发回调
                if (qrScanCallBack != null) {
                    qrScanCallBack.onResult((result != null), result, null);
                }
            } catch (Exception e) {
                LogPrintUtils.eTag(TAG, e, "decodeQRCode");
                // 触发回调
                if (qrScanCallBack != null) {
                    qrScanCallBack.onResult(false, null, e);
                }
            }
        }
    });
}
 
public Result[] zxing( Mat inputImage ) throws ChecksumException, FormatException {

        int w = inputImage.width();
        int h = inputImage.height();

        Mat southEast;

        if (mBugRotate) {
            southEast = inputImage.submat(h-h/4 , h , 0 , w/2 - h/4 );
        } else {
            southEast = inputImage.submat(0, h / 4, w / 2 + h / 4, w);
        }

        Bitmap bMap = Bitmap.createBitmap(southEast.width(), southEast.height(), Bitmap.Config.ARGB_8888);
        org.opencv.android.Utils.matToBitmap(southEast, bMap);
        southEast.release();
        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));

        Result[] results = {};
        try {
            results = qrCodeMultiReader.decodeMultiple(bitmap);
        }
        catch (NotFoundException e) {
        }

        return results;

    }
 
源代码8 项目: adamant-android   文件: QrCodeHelper.java
public String parse(InputStream imageStream) {
    final Bitmap bMap = BitmapFactory.decodeStream(imageStream);
    String contents = null;

    int[] intArray = new int[bMap.getWidth()*bMap.getHeight()];
    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));

    Map<DecodeHintType, Object> tmpHintsMap = new EnumMap<DecodeHintType, Object>(
            DecodeHintType.class);
    tmpHintsMap.put(DecodeHintType.TRY_HARDER, Boolean.TRUE);
    tmpHintsMap.put(DecodeHintType.POSSIBLE_FORMATS,
            EnumSet.allOf(BarcodeFormat.class));
    tmpHintsMap.put(DecodeHintType.PURE_BARCODE, Boolean.FALSE);

    Reader reader = new MultiFormatReader();
    Result result = null;
    try {
        result = reader.decode(bitmap, tmpHintsMap);
        contents = result.getText();
    } catch (NotFoundException | ChecksumException | FormatException e) {
        e.printStackTrace();
    }

    return contents;
}
 
源代码9 项目: CrazyDaily   文件: ScannerActivity.java
@Override
public void onActivityResult(int requestCode, int resultCode, Intent data) {
    if (resultCode == RESULT_OK && requestCode == REQUEST_SELECT_PICTURE) {
        final Uri selectedUri = data.getData();
        if (selectedUri != null) {
            try {
                Bitmap bitmap = MediaStore.Images.Media.getBitmap(getContentResolver(), selectedUri);
                if (bitmap != null) {
                    int width = bitmap.getWidth();
                    int height = bitmap.getHeight();
                    int[] dataArr = new int[width * height];
                    bitmap.getPixels(dataArr, 0, width, 0, 0, width, height);
                    Decoder decoder = new Decoder(new MultiFormatReader());
                    Result result = decoder.decode(new RGBLuminanceSource(width, height, dataArr));
                    if (result != null) {
                        BrowserActivity.start(this, result.getText());
                    } else {
                        SnackbarUtil.show(this, "这个码真扫不了");
                    }
                    bitmap.recycle();
                } else {
                    SnackbarUtil.show(this, "这个码真扫不了");
                }
            } catch (Exception e) {
                SnackbarUtil.show(this, "这个码真扫不了");
            }
        } else {
            SnackbarUtil.show(this, "这个码真扫不了");
        }
    }
}
 
源代码10 项目: code-scanner   文件: BarcodeUtils.java
/**
 * Decode barcode from RGB pixels array
 *
 * @param pixels Colors in standard Android ARGB format
 * @param width  Image width
 * @param height Image height
 * @param hints  Decoder hints
 * @return Decode result, if barcode was decoded successfully, {@code null} otherwise
 * @see DecodeHintType
 * @see Color
 */
@Nullable
public static Result decodeRgb(@NonNull final int[] pixels, final int width, final int height,
        @Nullable final Map<DecodeHintType, ?> hints) {
    Objects.requireNonNull(pixels);
    final MultiFormatReader reader = createReader(hints);
    try {
        return Utils
                .decodeLuminanceSource(reader, new RGBLuminanceSource(width, height, pixels));
    } catch (final ReaderException e) {
        return null;
    }
}
 
源代码11 项目: Aegis   文件: MainActivity.java
private void onScanImageResult(Intent intent) {
    Uri inputFile = (intent.getData());
    Bitmap bitmap;

    try {
        BitmapFactory.Options bmOptions = new BitmapFactory.Options();

        try (InputStream inputStream = getContentResolver().openInputStream(inputFile)) {
            bitmap = BitmapFactory.decodeStream(inputStream, null, bmOptions);
        }

        int[] intArray = new int[bitmap.getWidth() * bitmap.getHeight()];
        bitmap.getPixels(intArray, 0, bitmap.getWidth(), 0, 0, bitmap.getWidth(), bitmap.getHeight());

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

        Reader reader = new MultiFormatReader();
        Result result = reader.decode(binaryBitmap);

        GoogleAuthInfo info = GoogleAuthInfo.parseUri(result.getText());
        VaultEntry entry = new VaultEntry(info);

        startEditEntryActivity(CODE_ADD_ENTRY, entry, true);
    } catch (NotFoundException | IOException | ChecksumException | FormatException | GoogleAuthInfoException e) {
        e.printStackTrace();
        Dialogs.showErrorDialog(this, R.string.unable_to_read_qrcode, e);
    }
}
 
源代码12 项目: talk-android   文件: ScannerActivity.java
protected Result scanningImage(String path) {
    if (StringUtil.isBlank(path)) {
        return null;
    }
    // DecodeHintType 和EncodeHintType
    Hashtable<DecodeHintType, String> hints = new Hashtable<DecodeHintType, String>();
    hints.put(DecodeHintType.CHARACTER_SET, "utf-8"); // 设置二维码内容的编码
    BitmapFactory.Options options = new BitmapFactory.Options();
    options.inJustDecodeBounds = true; // 先获取原大小
    scanBitmap = BitmapFactory.decodeFile(path, options);
    options.inJustDecodeBounds = false; // 获取新的大小

    int sampleSize = (int) (options.outHeight / (float) 200);

    if (sampleSize <= 0)
        sampleSize = 1;
    options.inSampleSize = sampleSize;
    scanBitmap = BitmapFactory.decodeFile(path, options);
    int width = scanBitmap.getWidth(), height = scanBitmap.getHeight();
    int[] pixels = new int[width * height];
    scanBitmap.getPixels(pixels, 0, width, 0, 0, width, height);
    scanBitmap.recycle();
    scanBitmap = null;
    RGBLuminanceSource source = new RGBLuminanceSource(width, height, pixels);
    BinaryBitmap bitmap1 = new BinaryBitmap(new HybridBinarizer(source));
    QRCodeReader reader = new QRCodeReader();
    try {
        return reader.decode(bitmap1, hints);
    } catch (Exception e) {
        e.printStackTrace();
    }
    return null;
}
 
源代码13 项目: Document-Scanner   文件: ImageProcessor.java
public Result[] zxing( Mat inputImage ) throws ChecksumException, FormatException {

        int w = inputImage.width();
        int h = inputImage.height();

        Mat southEast;

        if (mBugRotate) {
            southEast = inputImage.submat(h-h/4 , h , 0 , w/2 - h/4 );
        } else {
            southEast = inputImage.submat(0, h / 4, w / 2 + h / 4, w);
        }

        Bitmap bMap = Bitmap.createBitmap(southEast.width(), southEast.height(), Bitmap.Config.ARGB_8888);
        org.opencv.android.Utils.matToBitmap(southEast, bMap);
        southEast.release();
        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));

        Result[] results = {};
        try {
            results = qrCodeMultiReader.decodeMultiple(bitmap);
        }
        catch (NotFoundException ignored) {
        }
        return results;
    }
 
源代码14 项目: FamilyChat   文件: QrCodeHelper.java
/**
 * 直接识别二维码位图
 *
 * @param bitmap 二维码位图
 * @return 二维码包含的内容
 */
public static String recognizeQrCode(Bitmap bitmap)
{
    if (bitmap == null)
        return null;
    Hashtable<DecodeHintType, String> hints = new Hashtable<>();
    hints.put(DecodeHintType.CHARACTER_SET, "utf-8"); // 设置二维码内容的编码
    //获取图片的像素存入到数组
    int[] pixels = new int[bitmap.getWidth() * bitmap.getHeight()];
    bitmap.getPixels(pixels, 0, bitmap.getWidth(), 0, 0, bitmap.getWidth(), bitmap.getHeight());
    RGBLuminanceSource source = new RGBLuminanceSource(bitmap.getWidth(), bitmap.getHeight(), pixels);
    BinaryBitmap bitmap1 = new BinaryBitmap(new HybridBinarizer(source));
    QRCodeReader reader = new QRCodeReader();
    try
    {
        Result result = reader.decode(bitmap1, hints);
        if (reader == null)
        {
            return null;
        } else
        {
            String str = result.toString();
            boolean ISO = Charset.forName("ISO-8859-1").newEncoder().canEncode(str);
            if (ISO)
                str = new String(str.getBytes("ISO-8859-1"), "GB2312");
            return str;
        }
    } catch (Exception e)
    {
        Log.e("QrCodeHelper", "recognizeQrCode fail:" + e.toString());
    }
    return null;
}
 
源代码15 项目: DeviceConnect-Android   文件: QRReader.java
/**
 * {@link Bitmap} から {@link LuminanceSource} を作成します.
 *
 * @param bitmap カメラのプレビュー画像
 * @return {@link LuminanceSource} のインスタンス
 */
private LuminanceSource createLuminanceSource(final Bitmap bitmap) {
    int w = bitmap.getWidth();
    int h = bitmap.getHeight();
    int[] intArray = new int[w * h];
    bitmap.getPixels(intArray, 0, w, 0, 0, w, h);
    return new RGBLuminanceSource(w, h, intArray);
}
 
源代码16 项目: RxQrCode   文件: RxQrCode.java
public static Observable<Result> scanFromPicture(String path) {
    return Observable.fromCallable(() -> {
        final BitmapFactory.Options options = new BitmapFactory.Options();
        options.inJustDecodeBounds = true;
        BitmapFactory.decodeFile(path, options);

        options.inSampleSize = calculateInSampleSize(options, QR_CODE_IN_SAMPLE_LENGTH,
                QR_CODE_IN_SAMPLE_LENGTH);

        options.inJustDecodeBounds = false;
        int[] pixels = null;

        QRCodeReader reader = new QRCodeReader();
        int retryTimes = 0;
        Result result = null;
        while (result == null && retryTimes < MAX_RETRY_TIMES) {
            Bitmap picture = BitmapFactory.decodeFile(path, options);
            int width = picture.getWidth();
            int height = picture.getHeight();
            if (pixels == null) {
                pixels = new int[picture.getWidth() * picture.getHeight()];
            }
            picture.getPixels(pixels, 0, width, 0, 0, width, height);
            picture.recycle();
            LuminanceSource source = new RGBLuminanceSource(width, height, pixels);
            BinaryBitmap bitmap = new BinaryBitmap(new HybridBinarizer(source));
            try {
                result = reader.decode(bitmap, TRY_HARDER);
            } catch (NotFoundException | ChecksumException | FormatException ignored) {
                retryTimes++;
                options.inSampleSize *= 2;
            }
        }
        reader.reset();

        return result;
    }).flatMap(result -> {
        if (result == null) {
            return Observable.error(NotFoundException.getNotFoundInstance());
        }
        return Observable.just(result);
    });
}
 
@ReactMethod
public void decode(String path, Callback callback) {
    Hashtable<DecodeHintType, String> hints = new Hashtable<DecodeHintType, String>();
    hints.put(DecodeHintType.CHARACTER_SET, "utf-8"); // 设置二维码内容的编码
    BitmapFactory.Options options = new BitmapFactory.Options();
    options.inJustDecodeBounds = true; // 先获取原大小
    options.inJustDecodeBounds = false; // 获取新的大小

    int sampleSize = (int) (options.outHeight / (float) 200);

    if (sampleSize <= 0)
        sampleSize = 1;
    options.inSampleSize = sampleSize;
    Bitmap scanBitmap = null;
    if (path.startsWith("http://")||path.startsWith("https://")) {
        scanBitmap = this.getbitmap(path);
    } else {
        scanBitmap = BitmapFactory.decodeFile(path, options);
    }
    if (scanBitmap == null) {
        callback.invoke("cannot load image");
        return;
    }
    int[] intArray = new int[scanBitmap.getWidth()*scanBitmap.getHeight()];
    scanBitmap.getPixels(intArray, 0, scanBitmap.getWidth(), 0, 0, scanBitmap.getWidth(), scanBitmap.getHeight());

    RGBLuminanceSource source = new RGBLuminanceSource(scanBitmap.getWidth(), scanBitmap.getHeight(), intArray);
    BinaryBitmap bitmap = new BinaryBitmap(new HybridBinarizer(source));
    QRCodeReader reader = new QRCodeReader();
    try {
        Result result = reader.decode(bitmap, hints);
        if (result == null) {
            callback.invoke("image format error");
        } else {
            callback.invoke(null, result.toString());
        }

    } catch (Exception e) {
        callback.invoke("decode error");
    }
}
 
源代码18 项目: Nimingban   文件: QRCodeScanActivity.java
@SuppressLint("StaticFieldLeak")
private void scanImage(final Uri uri) {
  if (progressDialog != null) return;
  progressDialog = new ProgressDialogBuilder(this)
      .setTitle(R.string.please_wait)
      .setMessage(R.string.qr_scan_processing)
      .setCancelable(false)
      .show();

  new AsyncTask<Void, Void, String>() {
    @Override
    protected String doInBackground(Void... voids) {
      UniFile file = UniFile.fromUri(QRCodeScanActivity.this, uri);
      if (file == null) return null;

      // ZXing can't process large image
      Bitmap bitmap = BitmapUtils.decodeStream(new UniFileInputStreamPipe(file), 1024, 1024);
      if (bitmap == null) return null;

      int width = bitmap.getWidth();
      int height = bitmap.getHeight();
      int[] pixels = new int[width * height];
      bitmap.getPixels(pixels, 0, width, 0, 0, width, height);
      bitmap.recycle();

      int[] newPixels = null;
      for (int i = 0; i < 4; i++) {
        if (i > 0) {
          newPixels = BitmapUtils.rotate(pixels, width, height, newPixels);
          int temp = width;
          width = height;
          height = temp;
          int[] tempPixels = pixels;
          pixels = newPixels;
          newPixels = tempPixels;
        }

        RGBLuminanceSource source = new RGBLuminanceSource(width, height, pixels);
        final HybridBinarizer hybBin = new HybridBinarizer(source);
        final BinaryBitmap bBitmap = new BinaryBitmap(hybBin);

        QRCodeReader reader = new QRCodeReader();
        Map<DecodeHintType, Boolean> hints = new HashMap<>();

        try {
          return reader.decode(bBitmap, hints).getText();
        } catch (NotFoundException | FormatException | ChecksumException e) {
          // Try PURE_BARCODE
          hints.put(DecodeHintType.PURE_BARCODE, Boolean.TRUE);
          reader.reset();
          try {
            return reader.decode(bBitmap, hints).getText();
          } catch (NotFoundException | FormatException | ChecksumException ee) {
            // pass
          }
        }
      }

      return null;
    }

    @Override
    protected void onPostExecute(String text) {
      if (progressDialog != null) {
        progressDialog.dismiss();
        progressDialog = null;
      }

      if (text != null) {
        processCookieText(text);
      } else {
        Toast.makeText(QRCodeScanActivity.this, R.string.qr_scan_invalid, Toast.LENGTH_SHORT).show();
      }
    }
  }.execute();
}
 
 类所在包
 类方法
 同包方法