2015-04-22 4 views
7

Ich benutze in meiner App ZXing-Bibliothek für die Generierung von QR-Code. Ich möchte einen QR-Code generieren, der zur Breite des Bildschirms passt (vielleicht ein kleines Padding).Android: Generierte QR-Code mit Zxing hat Ränder (passt nicht in den Bereich)

Wenn ich die Breite des Bildschirms als Breite des QR-Codes einstellen, bekomme ich kleinere QR-Code. Sehen Sie sich den Screenshot an (Auflösung 320x240). Ich möchte, dass der QR-Code in den schwarzen Bereich passt. Warum ist QR-Code in Rot so klein?

Wie dehne ich es in den schwarzen Bereich?

From the app

Mein Code:

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); 

Generieren QR-Code:

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; 
} 

Antwort

8

finde ich ein Problem!

Diese Zeile:

String encoding = guessAppropriateEncoding(contentsToEncode); 

gibt null zurück

So spielt keine Es gesetzt

EncodeHintType.MARGIN. 

die codition entfernen und es sollte in Ordnung sein.

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

Seien Sie sich nur bewusst, warum dieser Spielraum existiert. Der Randbereich (bekannt als die Ruhezone) wird durch das Design auf dem Bild platziert, um die bestmöglichen Ergebnisse beim Scannen bereitzustellen. Das Reduzieren oder Entfernen der Ruhezone kann es manchen Scannern erschweren, Ihren Code unter suboptimalen Bedingungen, wie beispielsweise bei schwachem Licht, schnell und genau zu scannen. In den meisten Fällen wird dies jedoch keinen Unterschied machen. – BrentM

Verwandte Themen