Sample code for 30+ languages & platforms
Java Requires Chilkat v11.7.0+

Get the Modules of a QR Code (Bit Matrix)

See more QR Code Examples

Demonstrates getting the QR code itself, as a grid of dark and light modules, to draw with something other than the built-in PNG and SVG output: on a canvas, in a PDF, on a display, or with a label printer language. With output.includeModuleData the response has symbols[0].moduleData, a bit matrix with one bit per module, each row starting on a new byte, most significant bit first, 1 for dark. The quiet zone is not part of the matrix. The example prints the symbol using two characters per module.

Chilkat Java Downloads

Chilkat2 Java
import com.chilkatsoft.chilkat2.BinData;
import com.chilkatsoft.chilkat2.ChilkatException;
import com.chilkatsoft.chilkat2.Formats;
import com.chilkatsoft.chilkat2.JsonObject;
import com.chilkatsoft.chilkat2.StringBuilder;

public class ChilkatExample {

    public static void main(String[] args) {
        // This example requires the Chilkat API to have been previously unlocked.
        // See Global Unlock Sample for sample code.

        JsonObject json = new JsonObject();
        json.updateString("payload.text", "CHILKAT");
        json.updateBool("output.includeModuleData", true);

        Formats fmt = new Formats();
        JsonObject jsonOut = new JsonObject();
        try {
            fmt.qrCode("generate", json, jsonOut);
        } catch (ChilkatException e) {
            System.out.println(e.getLastErrorText());
            return;
        }

        int width = jsonOut.intOf("symbols[0].moduleData.width");
        int height = jsonOut.intOf("symbols[0].moduleData.height");
        int rowBytes = jsonOut.intOf("symbols[0].moduleData.rowBytes");
        System.out.println("kind: " + jsonOut.stringOf("symbols[0].moduleData.kind"));
        System.out.println("modules: " + width + " x " + height + ", " + rowBytes + " bytes per row");

        // The matrix is height rows of rowBytes bytes.
        BinData bd = new BinData();
        try {
            bd.appendEncoded(jsonOut.stringOf("symbols[0].moduleData.bytesBase64"), "base64");
        } catch (ChilkatException e) {
            System.out.println(e.getLastErrorText());
            return;
        }

        StringBuilder sbRow = new StringBuilder();
        int b = 0;
        int mask = 128;
        for (int row = 0; row < height; row++) {
            sbRow.clear();
            for (int col = 0; col < width; col++) {
                // The module at (col,row) is a bit of the byte at (row * rowBytes) + (col / 8).
                // The leftmost module of each byte is its most significant bit.
                if ((col % 8) == 0) {
                    mask = 128;
                }

                b = bd.getByte((row * rowBytes) + (col / 8));
                if (((b / mask) % 2) == 1) {
                    sbRow.append("##");
                } else {
                    sbRow.append("  ");
                }

                mask = mask / 2;
            }

            System.out.println(sbRow.getAsString());
        }

        // The same symbol as the PNG that the call also returned:

        // image

        // Sample output:

        // kind: bitMatrix
        // modules: 21 x 21, 3 bytes per row
        // ##############              ##############
        // ##          ##      ####    ##          ##
        // ##  ######  ##  ##  ####    ##  ######  ##
        // ##  ######  ##  ##          ##  ######  ##
        // ##  ######  ##  ##  ##  ##  ##  ######  ##
        // ##          ##  ####  ##    ##          ##
        // ##############  ##  ##  ##  ##############
        //                 ####
        // ##  ##########      ####    ##########
        //     ####          ##  ########    ######
        // ####  ########    ####  ##  ####      ####
        //       ##  ##      ############    ####  ##
        //   ######  ####  ######  ##    ##  ##
        //                 ##  ##  ##    ##  ##    ##
        // ##############        ##  ##    ##      ##
        // ##          ##  ##  ##        ######  ####
        // ##  ######  ##  ####  ##  ##    ##
        // ##  ######  ##  ##  ############    ##
        // ##  ######  ##  ##      ##  ####  ##
        // ##          ##    ##  ########          ##
        // ##############  ##      ##      ######
    }
}