Sample code for 30+ languages & platforms
Xojo Plugin 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 Xojo Plugin Downloads

Xojo Plugin
Dim success As Boolean
success = False

//  This example requires the Chilkat API to have been previously unlocked.
//  See Global Unlock Sample for sample code.

Dim json As New Chilkat.JsonObject
success = json.UpdateString("payload.text","CHILKAT")
success = json.UpdateBool("output.includeModuleData",True)

Dim fmt As New Chilkat.Formats
Dim jsonOut As New Chilkat.JsonObject
success = fmt.QrCode("generate",json,jsonOut)
If (success = False) Then
    System.DebugLog(fmt.LastErrorText)
    Return
End If

Dim width As Int32
width = jsonOut.IntOf("symbols[0].moduleData.width")
Dim height As Int32
height = jsonOut.IntOf("symbols[0].moduleData.height")
Dim rowBytes As Int32
rowBytes = jsonOut.IntOf("symbols[0].moduleData.rowBytes")
System.DebugLog("kind: " + jsonOut.StringOf("symbols[0].moduleData.kind"))
System.DebugLog("modules: " + Str(width) + " x " + Str(height) + ", " + Str(rowBytes) + " bytes per row")

//  The matrix is height rows of rowBytes bytes.
Dim bd As New Chilkat.BinData
success = bd.AppendEncoded(jsonOut.StringOf("symbols[0].moduleData.bytesBase64"),"base64")
If (success = False) Then
    System.DebugLog(bd.LastErrorText)
    Return
End If

Dim sbRow As New Chilkat.StringBuilder
Dim row As Int32
Dim col As Int32
Dim b As Int32
Dim mask As Int32
mask = 128
For row = 0 To height - 1
    sbRow.Clear 
    For col = 0 To width - 1
        //  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 Mod 8) = 0) Then
            mask = 128
        End If

        b = bd.GetByte((row * rowBytes) + (col / 8))
        If (((b / mask) Mod 2) = 1) Then
            success = sbRow.Append("##")
        Else
            success = sbRow.Append("  ")
        End If

        mask = mask / 2
    Next
    System.DebugLog(sbRow.GetAsString())
Next

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

//  image

//  Sample output:

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