3

私は自分の質問に答えるためにこれを投稿しています(他の誰かがこの問題を抱えている場合に備えて言葉を広めるためです)。

ZXingのAndroidライブラリを使用してQRコードを生成しています。QRコードは正しく生成され、表示できます(を使用して手動でレンダリングした後QRCode.getMatrix().getArray())。ただし、生成されたQRコードは、ZXingのスキャナー自体を含め、Android市場で入手可能なほとんどのQRコードリーダーではスキャンされません。

さらに、のエラー訂正レベルを設定するとEncoder、それは無視され、ランダムなレベル(通常はレベルQ)でエンコードされます。

このコードでQRコードを生成します。

    QRCodeコード;

    試す
    {{
            code = Encoder.encode( "... QRCODEDATA ..."、ErrorCorrectionLevel.L);
    }
    catch(WriterException ex)
    {{
            log( "QRコードの取得に失敗しました");
            nullを返します。
    }
    

...そして、QRCodeオブジェクトを取得した後、次のようにビットマップを描画します。

byte[][] bitArray = qrCode.getMatrix().getArray();

        if(bitArray == null || bitArray.length < 1)
            return null;

        for(int x = 0;x < bitArray.length;x++)
        {
            for(int y = 0;y < bitArray[x].length;y++)
            {
                if(bitArray[x][y] == 0)
                    bitmapDrawCell(x,y,WHITE);
                else
                    bitmapDrawCell(x,y,BLACK);
            }
        }

これが私が最終的に得たものです。


正しく見えますが、スキャンされません。一握りのQRコードスキャナーはまだそれをスキャンしますが、ほとんどはスキャンしません。どうしたの?

4

2 に答える 2

3

この問題への答え:

QRコードは実際に反転されます。ZXingのドキュメントでは、qrCode.getMatrix()。getArray()が返す配列にインデックスを付ける方法については説明されていませんが、[y] [x]としてインデックスを付け、そのセルを(x、y)に描画することを前提としています。 )。質問に投稿されたコードは、配列に[x] [y]のインデックスを付けます。これにより、画像がY=Xの線に沿って反転します。

結果のQRコードは正当なように見えますが、この種の反転を検出してスキャンできるのは「スマート」スキャナーだけです。

エラー訂正レベルのビットも反対側の隅にあるため、手動で確認する場合(画像の右下隅の数ビットを見ると)、ライブラリはエラー訂正設定を無視しているように見えます。

反転したQRコード

于 2013-02-12T19:49:25.643 に答える
2

必ずしもあなたの質問に対する答えではありませんが、GoogleのQRジェネレーターを検討することができます。私はそれを使用しました、そしてそれはかなり簡単です。Google QR

于 2013-02-12T16:35:30.377 に答える