4

zxing ライブラリを使用してQRcodeを生成します。QR を生成すると正常に動作しますが、QR の左右に空白があります。この空白を削除する方法 (ビットマップの幅を高さにするため)

ここにQRを生成するための私のコードがあります

    private static final int QR_SIZE = 480;

  public static Bitmap generateQR(String content){
      Bitmap returnBitmap= null;
      try {
        Hashtable<EncodeHintType, ErrorCorrectionLevel> hintMap = new Hashtable<EncodeHintType, ErrorCorrectionLevel>();
        hintMap.put(EncodeHintType.ERROR_CORRECTION, ErrorCorrectionLevel.L);
        QRCodeWriter qrCodeWriter = new QRCodeWriter();
        BitMatrix matrix = qrCodeWriter.encode(content, BarcodeFormat.QR_CODE, QR_SIZE, QR_SIZE, hintMap);
        //int width = matrix.getWidth();
        int width = matrix.getHeight();
        int height = matrix.getHeight();
        int[] pixels = new int[width*height];
        for(int y=0; y<height; y++) {
            for(int x=0; x<width; x++) {
                int grey = matrix.get(x, y) ? 0x00 : 0xff;
                pixels[y*width+x] = 0xff000000 | (0x00010101*grey);
            }
        }    
        returnBitmap = Bitmap.createBitmap(width, height, Bitmap.Config.ARGB_8888);
        returnBitmap.setPixels(pixels, 0, width, 0, 0, width, height);
        //returnBitmap.set
    } catch (Exception e) {
        Log.d(LOGTAG, e.toString());
    }
    return returnBitmap;
  }
4

6 に答える 6

4

空白は削除しないでください。仕様で義務付けられています。

于 2012-12-24T11:52:09.450 に答える
3

完全を期すために、これはKotlinで書かれたソリューションです(上記の回答に基づいています):

fun generateQrImage(width: Int): Bitmap? {
    val code = "some code here" // Whatever you need to encode in the QR code
    val multiFormatWriter = MultiFormatWriter();
    try {
        val hintMap = mapOf(EncodeHintType.MARGIN to 0)
        val bitMatrix = multiFormatWriter.encode(code, BarcodeFormat.QR_CODE, width, width, hintMap)
        val barcodeEncoder = BarcodeEncoder();
        return barcodeEncoder.createBitmap(bitMatrix);
    } catch (e: Exception) {
        Log.error("Could not generate QR image", e)
        return null
    }
}
于 2020-05-08T09:09:00.087 に答える