8

サーバーからqrコードを受け取るアプリがあります。私はそれを (インテントとカメラではなく) デコードし、アプリに含まれるテキストを表示したいと考えています。私はすでにこのコードで zxing の jar を使用して Java SE でこれを行っています。

 private class QRCodeDecoder {
         public String decode(File imageFile) {
         BufferedImage image;
         try {
         image = ImageIO.read(imageFile);
         } catch (IOException e1) {
         return "io outch";
         }

         // creating luminance source
         LuminanceSource lumSource = new BufferedImageLuminanceSource(image);
         BinaryBitmap bitmap = new BinaryBitmap(new HybridBinarizer(lumSource));

         // barcode decoding
         QRCodeReader reader = new QRCodeReader();

         Result result = null;
         try {
         result = reader.decode(bitmap);
         } catch (ReaderException e) {
         return "reader error";
         }

         return result.getText();

         }
        }

しかし、Android では BufferedImage が見つかりません。電話に保存されている画像からAndroidのqrコードをデコードした人はいますか? Tnx。

4

3 に答える 3

18

Android では、次の方法で実行できます。

    @Override
    protected Result doInBackground(Void... params)
    {
        try
        {
            InputStream inputStream = activity.getContentResolver().openInputStream(uri);
            Bitmap bitmap = BitmapFactory.decodeStream(inputStream);
            if (bitmap == null)
            {
                Log.e(TAG, "uri is not a bitmap," + uri.toString());
                return null;
            }
            int width = bitmap.getWidth(), height = bitmap.getHeight();
            int[] pixels = new int[width * height];
            bitmap.getPixels(pixels, 0, width, 0, 0, width, height);
            bitmap.recycle();
            bitmap = null;
            RGBLuminanceSource source = new RGBLuminanceSource(width, height, pixels);
            BinaryBitmap bBitmap = new BinaryBitmap(new HybridBinarizer(source));
            MultiFormatReader reader = new MultiFormatReader();
            try
            {
                Result result = reader.decode(bBitmap);
                return result;
            }
            catch (NotFoundException e)
            {
                Log.e(TAG, "decode exception", e);
                return null;
            }
        }
        catch (FileNotFoundException e)
        {
            Log.e(TAG, "can not open file" + uri.toString(), e);
            return null;
        }
    }
于 2013-01-06T03:27:45.683 に答える
2

グーグルコードからZXingをダウンロードしてください、そしてこのクラスファイル:ZXing-1.6/zxing-1.6/androidtest/src/com/google/zxing/client/androidtest/RGBLuminanceSource.javaあなたを助けることができます。

于 2011-07-12T03:14:47.800 に答える
-3

Quickmark と qr droid は実際にコードの内容を読み取り、携帯電話に保存されているバーコードをデコードできます。画像を読み込んで共有を選択するときにメニュー ボタンを押して、decode qr droid を見つけたり、quickmark をデコードしたりすれば、魔法のように機能します。コードに何が入力されているかを教えてくれるので、コードを読むにはクイックマークが好きです。

于 2011-02-17T00:08:35.233 に答える