Creare il QR Code con le risorse della libreria esterna libqrencode
Vai alla navigazione
Vai alla ricerca
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