Search in sources :

Example 71 with BitMatrix

use of com.google.zxing.common.BitMatrix in project zxing by zxing.

the class QRCodeEncoder method encodeAsBitmap.

Bitmap encodeAsBitmap() 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.class);
        hints.put(EncodeHintType.CHARACTER_SET, encoding);
    }
    BitMatrix result;
    try {
        result = new MultiFormatWriter().encode(contentsToEncode, format, dimension, dimension, 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) ? BLACK : WHITE;
        }
    }
    Bitmap bitmap = Bitmap.createBitmap(width, height, Bitmap.Config.ARGB_8888);
    bitmap.setPixels(pixels, 0, width, 0, 0, width, height);
    return bitmap;
}
Also used : Bitmap(android.graphics.Bitmap) EncodeHintType(com.google.zxing.EncodeHintType) MultiFormatWriter(com.google.zxing.MultiFormatWriter) BitMatrix(com.google.zxing.common.BitMatrix)

Example 72 with BitMatrix

use of com.google.zxing.common.BitMatrix in project CloudReader by youlookwhat.

the class QRCodeUtil method createQRImage.

/**
     * 生成二维码Bitmap
     *
     * @param content   内容
     * @param widthPix  图片宽度
     * @param heightPix 图片高度
     * @param logoBm    二维码中心的Logo图标(可以为null)
     * @param filePath  用于存储二维码图片的文件路径
     * @return 生成二维码及保存文件是否成功
     */
public static boolean createQRImage(String content, int widthPix, int heightPix, Bitmap logoBm, String filePath) {
    try {
        if (content == null || "".equals(content)) {
            return false;
        }
        //配置参数
        Map<EncodeHintType, Object> hints = new HashMap<>();
        hints.put(EncodeHintType.CHARACTER_SET, "utf-8");
        //容错级别
        hints.put(EncodeHintType.ERROR_CORRECTION, ErrorCorrectionLevel.H);
        //设置空白边距的宽度
        //            hints.put(EncodeHintType.MARGIN, 2); //default is 4
        // 图像数据转换,使用了矩阵转换
        BitMatrix bitMatrix = new QRCodeWriter().encode(content, BarcodeFormat.QR_CODE, widthPix, heightPix, hints);
        int[] pixels = new int[widthPix * heightPix];
        // 两个for循环是图片横列扫描的结果
        for (int y = 0; y < heightPix; y++) {
            for (int x = 0; x < widthPix; x++) {
                if (bitMatrix.get(x, y)) {
                    pixels[y * widthPix + x] = 0xff000000;
                } else {
                    pixels[y * widthPix + x] = 0xffffffff;
                }
            }
        }
        // 生成二维码图片的格式,使用ARGB_8888
        Bitmap bitmap = Bitmap.createBitmap(widthPix, heightPix, Bitmap.Config.ARGB_8888);
        bitmap.setPixels(pixels, 0, widthPix, 0, 0, widthPix, heightPix);
        if (logoBm != null) {
            bitmap = addLogo(bitmap, logoBm);
        }
        //必须使用compress方法将bitmap保存到文件中再进行读取。直接返回的bitmap是没有任何压缩的,内存消耗巨大!
        return bitmap != null && bitmap.compress(Bitmap.CompressFormat.JPEG, 100, new FileOutputStream(filePath));
    } catch (WriterException | IOException e) {
        e.printStackTrace();
    }
    return false;
}
Also used : HashMap(java.util.HashMap) BitMatrix(com.google.zxing.common.BitMatrix) IOException(java.io.IOException) QRCodeWriter(com.google.zxing.qrcode.QRCodeWriter) Bitmap(android.graphics.Bitmap) EncodeHintType(com.google.zxing.EncodeHintType) FileOutputStream(java.io.FileOutputStream) WriterException(com.google.zxing.WriterException)

Example 73 with BitMatrix

use of com.google.zxing.common.BitMatrix in project zxing by zxing.

the class DecodeWorker method dumpBlackPoint.

/**
   * Writes out a single PNG which is three times the width of the input image, containing from left
   * to right: the original image, the row sampling monochrome version, and the 2D sampling
   * monochrome version.
   */
private static void dumpBlackPoint(URI uri, BufferedImage image, BinaryBitmap bitmap) throws IOException {
    int width = bitmap.getWidth();
    int height = bitmap.getHeight();
    int stride = width * 3;
    int[] pixels = new int[stride * height];
    // The original image
    int[] argb = new int[width];
    for (int y = 0; y < height; y++) {
        image.getRGB(0, y, width, 1, argb, 0, width);
        System.arraycopy(argb, 0, pixels, y * stride, width);
    }
    // Row sampling
    BitArray row = new BitArray(width);
    for (int y = 0; y < height; y++) {
        try {
            row = bitmap.getBlackRow(y, row);
        } catch (NotFoundException nfe) {
            // If fetching the row failed, draw a red line and keep going.
            int offset = y * stride + width;
            Arrays.fill(pixels, offset, offset + width, RED);
            continue;
        }
        int offset = y * stride + width;
        for (int x = 0; x < width; x++) {
            pixels[offset + x] = row.get(x) ? BLACK : WHITE;
        }
    }
    // 2D sampling
    try {
        for (int y = 0; y < height; y++) {
            BitMatrix matrix = bitmap.getBlackMatrix();
            int offset = y * stride + width * 2;
            for (int x = 0; x < width; x++) {
                pixels[offset + x] = matrix.get(x, y) ? BLACK : WHITE;
            }
        }
    } catch (NotFoundException ignored) {
    // continue
    }
    writeResultImage(stride, height, pixels, uri, ".mono.png");
}
Also used : NotFoundException(com.google.zxing.NotFoundException) BitArray(com.google.zxing.common.BitArray) BitMatrix(com.google.zxing.common.BitMatrix) ResultPoint(com.google.zxing.ResultPoint)

Example 74 with BitMatrix

use of com.google.zxing.common.BitMatrix in project zxing by zxing.

the class ChartServlet method doEncode.

private static void doEncode(ServletRequest request, HttpServletResponse response, boolean isPost) throws IOException {
    ChartServletRequestParameters parameters;
    try {
        parameters = doParseParameters(request, isPost);
    } catch (IllegalArgumentException | NullPointerException e) {
        response.sendError(HttpServletResponse.SC_BAD_REQUEST, e.toString());
        return;
    }
    Map<EncodeHintType, Object> hints = new EnumMap<>(EncodeHintType.class);
    hints.put(EncodeHintType.MARGIN, parameters.getMargin());
    if (!StandardCharsets.ISO_8859_1.equals(parameters.getOutputEncoding())) {
        // Only set if not QR code default
        hints.put(EncodeHintType.CHARACTER_SET, parameters.getOutputEncoding().name());
    }
    hints.put(EncodeHintType.ERROR_CORRECTION, parameters.getEcLevel());
    BitMatrix matrix;
    try {
        matrix = new QRCodeWriter().encode(parameters.getText(), BarcodeFormat.QR_CODE, parameters.getWidth(), parameters.getHeight(), hints);
    } catch (WriterException we) {
        response.sendError(HttpServletResponse.SC_BAD_REQUEST, we.toString());
        return;
    }
    ByteArrayOutputStream pngOut = new ByteArrayOutputStream();
    MatrixToImageWriter.writeToStream(matrix, "PNG", pngOut);
    byte[] pngData = pngOut.toByteArray();
    response.setContentType("image/png");
    response.setContentLength(pngData.length);
    response.setHeader("Cache-Control", "public");
    response.getOutputStream().write(pngData);
}
Also used : BitMatrix(com.google.zxing.common.BitMatrix) ByteArrayOutputStream(java.io.ByteArrayOutputStream) QRCodeWriter(com.google.zxing.qrcode.QRCodeWriter) EncodeHintType(com.google.zxing.EncodeHintType) EnumMap(java.util.EnumMap) WriterException(com.google.zxing.WriterException)

Example 75 with BitMatrix

use of com.google.zxing.common.BitMatrix in project zxing by zxing.

the class DataMatrixWriterTestCase method testDataMatrixTooSmall.

@Test
public void testDataMatrixTooSmall() {
    // The DataMatrix will not fit in this size, so the matrix should come back bigger
    int tooSmall = 8;
    DataMatrixWriter writer = new DataMatrixWriter();
    BitMatrix matrix = writer.encode("http://www.google.com/", BarcodeFormat.DATA_MATRIX, tooSmall, tooSmall, null);
    assertNotNull(matrix);
    assertTrue(tooSmall < matrix.getWidth());
    assertTrue(tooSmall < matrix.getHeight());
}
Also used : BitMatrix(com.google.zxing.common.BitMatrix) SymbolShapeHint(com.google.zxing.datamatrix.encoder.SymbolShapeHint) Test(org.junit.Test)

Aggregations

BitMatrix (com.google.zxing.common.BitMatrix)119 EncodeHintType (com.google.zxing.EncodeHintType)27 ResultPoint (com.google.zxing.ResultPoint)26 Test (org.junit.Test)20 Bitmap (android.graphics.Bitmap)18 QRCodeWriter (com.google.zxing.qrcode.QRCodeWriter)17 WriterException (com.google.zxing.WriterException)14 DecoderResult (com.google.zxing.common.DecoderResult)12 EnumMap (java.util.EnumMap)11 MultiFormatWriter (com.google.zxing.MultiFormatWriter)10 DetectorResult (com.google.zxing.common.DetectorResult)10 Hashtable (java.util.Hashtable)10 AztecDetectorResult (com.google.zxing.aztec.AztecDetectorResult)8 Result (com.google.zxing.Result)7 Point (com.google.zxing.aztec.detector.Detector.Point)5 SymbolShapeHint (com.google.zxing.datamatrix.encoder.SymbolShapeHint)5 ArrayList (java.util.ArrayList)5 HashMap (java.util.HashMap)5 Map (java.util.Map)5 NotFoundException (com.google.zxing.NotFoundException)4