ZXingを使ってQRコードを表示する

ZXingとは

zxing - Project Hosting on Google Code
googleさんが作ったバーコードのエンコード/デコードライブラリです。
Androidバーコードリーダはほとんどがこれを採用しています。
対応しているバーコードの種類も豊富です。
さらにjava以外にもいろんな言語をサポートしているみたいですね。
今回はQRコードの表示のみです。
意外と探しても見つからなかったのでメモります。*1

ZXingのビルド

ここを見ながらやりました。分かりやすいです。
Android ZXingを使ったバーコードリーダのコーディング 電脳羊(Android Dream)/ウェブリブログ
WindowsならCドライブルートとかでやったほうがいいですね。失敗する場合があります。

ソース

public Bitmap createQRCodeByZxing(String contents,int size) throws WriterException {
  //QRコードをエンコードするクラス
  QRCodeWriter writer = new QRCodeWriter();

  //異なる型の値を入れるためgenericは使えない
  Hashtable encodeHint = new Hashtable();

  //日本語を扱うためにシフトJISを指定
  encodeHint.put(EncodeHintType.CHARACTER_SET, "shiftjis");

  //エラー修復レベルを指定
  //L 7%が復元可能
  //M 15%が復元可能
  //Q 25%が復元可能
  //H 30%が復元可能
  encodeHint.put(EncodeHintType.ERROR_CORRECTION, ErrorCorrectionLevel.L);
  
  ByteMatrix qrCodeData = writer.encode(contents, BarcodeFormat.QR_CODE, size, size, encodeHint);

  //QRコードのbitmap画像を作成
  Bitmap bitmap = Bitmap.createBitmap(size, size, Config.ARGB_8888);
  bitmap.eraseColor(Color.argb(255, 255, 255, 255)); //いらないかも
  for (int x = 0; x < qrCodeData.getWidth(); x++) {
    for (int y = 0; y < qrCodeData.getHeight(); y++) {
      if (qrCodeData.get(x, y) == 0) {
        //0はBlack
        bitmap.setPixel(x, y, Color.argb(255, 0, 0, 0));
      } else {
        //-1はWhite
        bitmap.setPixel(x, y, Color.argb(255, 255, 255, 255));
      }
    }
  }

  return bitmap;
}

Bitmapを作るところはandroid特有のものですね。
他はpure javaで使えると思います。

*1:簡単すぎて?