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