El primero código tiene el fin de conocer el texto del QR Code:
Public Struct QrCodeHeader
model As Integer
version As Integer
level As Integer
charactor_size As Integer
byte_size As Integer
End Struct
Private Const CV_LOAD_IMAGE_UNCHANGED As Short = -1
Private Const DEFAULT_ADAPTIVE_TH_SIZE As Byte = 25
Private Const DEFAULT_ADAPTIVE_TH_DELTA As Byte = 10
Library "libopencv_highgui:2.4.2"
' IplImage* cvLoadImage( const char* filename, int flags )
Private Extern cvLoadImage(filename As String, flagLIC As Integer) As Pointer
Library "libopencv_core:2.4.2"
' void cvReleaseImage(IplImage * image)
Private Extern cvReleaseImage(img As Pointer)
Library "libdecodeqr:0.9.3"
' QrDecoderHandle qr_decoder_open ()
Private Extern qr_decoder_open() As Pointer
' short qr_decoder_decode_image (QrDecoderHandle decoder, IplImage *src, int adaptive_th_size, int adaptive_th_delta)
Private Extern qr_decoder_decode_image(decoderP As Pointer, srcP As Pointer, adaptive_th_size As Integer, adaptive_th_delta As Integer) As Short
' int qr_decoder_get_header (QrDecoderHandle decoder, QrCodeHeader *header)
Private Extern qr_decoder_get_header(decoderP As Pointer, header As Pointer) As Integer
' int qr_decoder_get_body (QrDecoderHandle decoder, unsigned char *buf, int buf_size)
Private Extern qr_decoder_get_body(decoderP As Pointer, buf As Pointer, buf_size As Integer) As Integer
' void qr_decoder_close (QrDecoderHandle decoder)
Private Extern qr_decoder_close(decoderP As Pointer)
Public Sub Button1_Click()
Dim header, imago, decoder, buf As Pointer
Dim qdh As QrCodeHeader
header = Alloc(24)
' Es cargada la imagen del "QR Code":
imago = cvLoadImage("/direccion/de la/imagen/del/Qr Code", CV_LOAD_IMAGE_UNCHANGED)
' Es inicializada la librerías "decoderqr":
decoder = qr_decoder_open()
' Efectúa la decodificación utilizando parámetros por defecto:
qr_decoder_decode_image(decoder, imago, DEFAULT_ADAPTIVE_TH_SIZE, DEFAULT_ADAPTIVE_TH_DELTA)
If IsNull(qr_decoder_get_header(decoder, header)) = False Then
qdh = Header
buf = Alloc(qdh.byte_size + 1)
qr_decoder_get_body(decoder, buf, qdh.byte_size + 1)
' Desreferenciando del "pointer", se muestra el texto del "QR Code":
Print String@(buf)
Endif
' Terminando...:
qr_decoder_close(decoder)
cvReleaseImage(VarPtr(imago))
Free(buf)
Free(header)
End
model As Integer
version As Integer
level As Integer
charactor_size As Integer
byte_size As Integer
End Struct
Private Const CV_LOAD_IMAGE_UNCHANGED As Short = -1
Private Const DEFAULT_ADAPTIVE_TH_SIZE As Byte = 25
Private Const DEFAULT_ADAPTIVE_TH_DELTA As Byte = 10
Library "libopencv_highgui:2.4.2"
' IplImage* cvLoadImage( const char* filename, int flags )
Private Extern cvLoadImage(filename As String, flagLIC As Integer) As Pointer
Library "libopencv_core:2.4.2"
' void cvReleaseImage(IplImage * image)
Private Extern cvReleaseImage(img As Pointer)
Library "libdecodeqr:0.9.3"
' QrDecoderHandle qr_decoder_open ()
Private Extern qr_decoder_open() As Pointer
' short qr_decoder_decode_image (QrDecoderHandle decoder, IplImage *src, int adaptive_th_size, int adaptive_th_delta)
Private Extern qr_decoder_decode_image(decoderP As Pointer, srcP As Pointer, adaptive_th_size As Integer, adaptive_th_delta As Integer) As Short
' int qr_decoder_get_header (QrDecoderHandle decoder, QrCodeHeader *header)
Private Extern qr_decoder_get_header(decoderP As Pointer, header As Pointer) As Integer
' int qr_decoder_get_body (QrDecoderHandle decoder, unsigned char *buf, int buf_size)
Private Extern qr_decoder_get_body(decoderP As Pointer, buf As Pointer, buf_size As Integer) As Integer
' void qr_decoder_close (QrDecoderHandle decoder)
Private Extern qr_decoder_close(decoderP As Pointer)
Public Sub Button1_Click()
Dim header, imago, decoder, buf As Pointer
Dim qdh As QrCodeHeader
header = Alloc(24)
' Es cargada la imagen del "QR Code":
imago = cvLoadImage("/direccion/de la/imagen/del/Qr Code", CV_LOAD_IMAGE_UNCHANGED)
' Es inicializada la librerías "decoderqr":
decoder = qr_decoder_open()
' Efectúa la decodificación utilizando parámetros por defecto:
qr_decoder_decode_image(decoder, imago, DEFAULT_ADAPTIVE_TH_SIZE, DEFAULT_ADAPTIVE_TH_DELTA)
If IsNull(qr_decoder_get_header(decoder, header)) = False Then
qdh = Header
buf = Alloc(qdh.byte_size + 1)
qr_decoder_get_body(decoder, buf, qdh.byte_size + 1)
' Desreferenciando del "pointer", se muestra el texto del "QR Code":
Print String@(buf)
Endif
' Terminando...:
qr_decoder_close(decoder)
cvReleaseImage(VarPtr(imago))
Free(buf)
Free(header)
End
El segundo tiene el fin de generar el QR Code de un texto (......en console):
Public Struct QRcode
version As Integer
width As Integer
data As Pointer
End Struct
Private Const QR_ECLEVEL_L As Byte = 0 ' Level of error correction: lowest
Private Const QR_MODE_8 As Byte = 2 ' 8-bit data mode
Library "libqrencode:3.4.1"
' QRcode * QRcode_encodeString(const char * String, Int version, QRecLevel level, QRencodeMode hint, Int casesensitive) --> Create a symbol from the string.
Private Extern QRcode_encodeString(testo As String, vers 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 result As New QRcode
Dim s As String = "http://foro.gambas-es.org" ' texto de lo que se generará el QR Code
Dim ms As Stream
Dim j As Short
Dim b As Byte
result = QRcode_encodeString(s, 0, QR_ECLEVEL_L, QR_MODE_8, 1)
' Utilizamos "Memory-Stream" para desreferenciar en toda la su dimensione la variable de tipo "Pointer" del 3° miembro de la Estructura:
ms = Memory result.data For Read
For j = 0 To (result.width * result.width) - 1
Read #ms, b
If (b And 1) = 1 Then ' Si LSB del byte = 1...
Print String$(2, String.Chr(&2588));
Else ' si en lugar LSB = 0.....
Print Space(2);
Endif
' Si hemos terminado de escribir en la consola una línea del QR Code, entonces vamos a la nueva línea:
If (j + 1) Mod result.width = 0 Then Print
Next
' Terminando.....
QRcode_free(result)
End
version As Integer
width As Integer
data As Pointer
End Struct
Private Const QR_ECLEVEL_L As Byte = 0 ' Level of error correction: lowest
Private Const QR_MODE_8 As Byte = 2 ' 8-bit data mode
Library "libqrencode:3.4.1"
' QRcode * QRcode_encodeString(const char * String, Int version, QRecLevel level, QRencodeMode hint, Int casesensitive) --> Create a symbol from the string.
Private Extern QRcode_encodeString(testo As String, vers 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 result As New QRcode
Dim s As String = "http://foro.gambas-es.org" ' texto de lo que se generará el QR Code
Dim ms As Stream
Dim j As Short
Dim b As Byte
result = QRcode_encodeString(s, 0, QR_ECLEVEL_L, QR_MODE_8, 1)
' Utilizamos "Memory-Stream" para desreferenciar en toda la su dimensione la variable de tipo "Pointer" del 3° miembro de la Estructura:
ms = Memory result.data For Read
For j = 0 To (result.width * result.width) - 1
Read #ms, b
If (b And 1) = 1 Then ' Si LSB del byte = 1...
Print String$(2, String.Chr(&2588));
Else ' si en lugar LSB = 0.....
Print Space(2);
Endif
' Si hemos terminado de escribir en la consola una línea del QR Code, entonces vamos a la nueva línea:
If (j + 1) Mod result.width = 0 Then Print
Next
' Terminando.....
QRcode_free(result)
End