2015-04-22 17 views
7

ZXing marjları vardır kullanarak QR kodunu Oluşturulan (alana uygun değil). Ekranın genişliğine uyması gereken QR kodu oluşturmak istiyorum (belki küçük bir dolgu). Ben QR kodu genişliği boyutu olarak ekranın genişliğini ayarlarsanızAndroid: Ben QR kodu üretmek için kütüphane ZXing Uygulamamda kullanıyorum

Ben küçük QR kodu olsun. Ekran görüntüsüne bakın (320x240 çözünürlük). QR kodunu siyah alana sığdırmak istiyorum. QR kodu neden kırmızı kadar küçük?

nasıl siyah alanda onu germek mi?

From the app

Kodum:

Display display = getWindowManager().getDefaultDisplay(); 
Point size = new Point(); 
display.getSize(size); 
int width = size.x; 

Bitmap bm = encodeAsBitmap(mGeneratedURL, BarcodeFormat.QR_CODE, width, width); 
qrcodeImage.setImageBitmap(bm); 

Yaratma QR kodu:

private Bitmap encodeAsBitmap(String contents, BarcodeFormat format, int img_width, int img_height) throws WriterException { 
    String contentsToEncode = contents; 
    if (contentsToEncode == null) { 
     return null; 
    } 
    Map<EncodeHintType, Object> hints = null; 
    String encoding = guessAppropriateEncoding(contentsToEncode); 
    if (encoding != null) { 
     hints = new EnumMap<EncodeHintType, Object>(EncodeHintType.class); 
     //hints.put(EncodeHintType.CHARACTER_SET, encoding); 
     hints.put(EncodeHintType.MARGIN, 0); /* default = 4 */ 
    } 
    MultiFormatWriter writer = new MultiFormatWriter(); 
    BitMatrix result; 
    try { 
     result = writer.encode(contentsToEncode, format, img_width, img_height, hints); 
    } catch (IllegalArgumentException iae) { 
     // Unsupported format 
     return null; 
    } 

    int width = result.getWidth(); 
    int height = result.getHeight(); 
    int[] pixels = new int[width * height]; 
    for (int y = 0; y < height; y++) { 
     int offset = y * width; 
     for (int x = 0; x < width; x++) { 
      pixels[offset + x] = result.get(x, y) ? RED : Color.BLACK; 
     } 
    } 

    Bitmap bitmap = Bitmap.createBitmap(width, height, 
      Bitmap.Config.ARGB_8888); 
    bitmap.setPixels(pixels, 0, width, 0, 0, width, height); 
    return bitmap; 
} 

cevap

8

Ben bir sorun bulmak!

Bu hat:

String encoding = guessAppropriateEncoding(contentsToEncode); 

döner

boş Yani O

EncodeHintType.MARGIN. 

codition çıkarın ve Tamam olmalıdır set gelmiyor.Fark.

//if (encoding != null) { 
    hints = new EnumMap<EncodeHintType, Object>(EncodeHintType.class); 
    //hints.put(EncodeHintType.CHARACTER_SET, encoding); 
    hints.put(EncodeHintType.MARGIN, 0); /* default = 4 */ 
//} 
+1

Sadece bu marj var nedeni unutmayın. Tarama sırasında mümkün olan en iyi sonuçları sağlamak için kenar boşluğu alanı (sessiz bölge olarak bilinir) tasarıma yerleştirilir. Sessiz alanın azaltılması veya kaldırılması, bazı tarayıcıların kodunuzu düşük ışık gibi alt-optimal koşullarda hızlı ve doğru bir şekilde taramasını zorlaştırabilir, ancak çoğu durumda bir fark yaratmayacaktır. – BrentM

İlgili konular