Creare il QR Code con le risorse della libreria esterna libqrencode

Da Gambas-it.org - Wikipedia.

Mostriamo un semplice codice per creare il QR Code di un testo mediante le risorse della libreria esterna condivisa libqrencode.so.4.1.1.
Il QR Code sarà disegnato in un Oggetto Image, che sarà assegnato a una PictureBox, perché sia mostrato il disegno del QR Code, e del quale si produrrà un file immagine.

Private Const XY As Integer = 5
Private Const LATO As Integer = 4


Library "libqrencode:4.1.1"

Public Struct QRcode
  version As Integer
  width As Integer
  data As Pointer
End Struct

Private Enum QR_ECLEVEL_L = 0, QR_ECLEVEL_M, QR_ECLEVEL_Q, QR_ECLEVEL_H
Private Const QR_MODE_8 As Integer = 2

' QRcode * QRcode_encodeString(const char * string, Int version, QRecLevel level, QRencodeMode hint, Int casesensitive)
' Create a symbol from the string.
Private Extern QRcode_encodeString(string_ As String, version As Integer, level As Integer, hint As Integer, casesensitive As Integer) As QRcode

' void   QRcode_free (QRcode *qrcode)
' Free the instance of QRcode class.
Private Extern QRcode_free(qrcode As QRcode)


Public Sub Form_Open()

 Dim t As String
 Dim qrc As QRcode
 Dim c, x, y As Integer
 Dim b As Byte 
 Dim im As Image
 
' Testo di cui genera il QR Code:
 t = "www.gambas-it.org"

 qrc = QRcode_encodeString(t, 0, QR_ECLEVEL_L, QR_MODE_8, 1)
  
 im = New Image(qrc.width * LATO + (XY * 2), qrc.width * LATO + (XY * 2), Color.White, Image.Standard)

 x = XY
 y = XY
 
 With Paint
   .Begin(im)
   For c = 0 To (qrc.width * qrc.width) - 1
     b = Byte@(qrc.data + c)
     If (b And 1) = 1 Then    ' Se il LSB del byte è uguale a 1, allora...
       .Rectangle(x, y, LATO, LATO)
       .Fill
     Else                     ' se il LSB è invece uguale a zero, allora....
       .DrawRect(x, y, LATO, LATO, Color.Transparent)
     Endif
     x += LATO
' Se ha terminato di disegnare una riga del QR Code, allora va a capo:
     If (c + 1) Mod qrc.width = 0 Then 
       x = XY
       y += LATO
     Endif
   Next
   .End
 End With

 im.Save("/tmp/qrcode.png", 100)

 PictureBox1.Image = im

 QRcode_free(qrc)

End