Gambas-it

Gambas3 => Programmazione => Topic aperto da: vuott - 14 Agosto 2013, 02:37:13

Titolo: QR Code: creare l'immagine da un testo e viceversa
Inserito da: vuott - 14 Agosto 2013, 02:37:13
Dalla collaborazione di milio e vuott......

(http://www.antoniodecurtis.org/divisi_a_berlino10.jpg)

si è ricavato un applicativo per poter conoscere il testo del QR Code (http://it.m.wikipedia.org/wiki/Codice_QR).
Per la realizzazione di questo codice si sono utilizzate le funzioni delle librerie dinamiche di ''OpenCV (http://opencv.org/)'' e di ''QRdecoder (http://sourcecodebrowser.com/libdecodeqr/0.9.3/index.html)".

Ne presentiamo il resoconto di seguito:


Codice: gambas [Seleziona]
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.0"

' IplImage* cvLoadImage( const char* filename, int flags )
Private Extern cvLoadImage(filename As String, flagLIC As Integer) As Pointer


Library "libopencv_core:2.4.0"

' 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, immago, decoder, buf As Pointer
  Dim qdh As QrCodeHeader

  header = Alloc(SizeOf(gb.Byte), 24)

' Viene caricata l'immagine del "QR Code":
  immago = cvLoadImage("/percorso/della/immagine/del/Qr Code", CV_LOAD_IMAGE_UNCHANGED)
  If immago == 0 Then Error.Raise("Errore !")

' Viene inizializzata la libreria "decoderqr":
  decoder = qr_decoder_open()
  If decoder == 0 Then Error.Raise("Errore !")

' Effettua la decodifica utilizzando parametri di default:
  qr_decoder_decode_image(decoder, immago, DEFAULT_ADAPTIVE_TH_SIZE, DEFAULT_ADAPTIVE_TH_DELTA)

  If qr_decoder_get_header(decoder, header) > 0 Then
    qdh = Header
    buf = Alloc(qdh.byte_size + 1)
    qr_decoder_get_body(decoder, buf, qdh.byte_size + 1)
' Dereferenziando il "pointer", viene mostrato il testo del "QR Code":
    Print String@(buf)
  Endif

' Va in chiusura:
  qr_decoder_close(decoder)
  cvReleaseImage(VarPtr(immago))
  Free(buf)
  Free(header)

End
Titolo: Re: Conoscere il QR Code Text di un Barcode
Inserito da: milio - 14 Agosto 2013, 05:57:35
Non diciamo fesserie!

Il merito di questo progetto è tutto tuo.... io ti avevo solo chiesto una dritta e alla fine hai buttato giù tutto il codice  :ok:

Comunque grazie... se tu volessi fare anche il processo inverso come descritto in messaggio privato, potremmo realizzare un bel componente....

Titolo: Re: Conoscere il QR Code Text
Inserito da: md9327 - 14 Agosto 2013, 19:35:10
'Stò ragazzo ormai non se controlla più...  ;D

Ormai è entrato a far parte della casta dei "guru", e il bello è che non se ne rende nemmeno conto...  :2birre:
Titolo: Re: QR Code: creare l'immagine da un testo e viceversa
Inserito da: vuott - 14 Agosto 2013, 19:41:00
.....far parte della casta dei "guru",

...me ne voglio anda' a fa' 'n guru !
Titolo: Re: Conoscere il QR Code Text
Inserito da: md9327 - 14 Agosto 2013, 20:01:19
gurucuccuru...  ;D
Titolo: Re: QR Code: creare l'immagine da un testo e viceversa
Inserito da: vuott - 15 Agosto 2013, 05:31:06
Vediamo ora un breve codice per generare il QR code di un testo.

Preciso che questo semplicissimo codice non salverà il disegno del QR Code in un file immagine, ma lo mostrerà in console.... abbiate pazienza !    :'(

Codice: gambas [Seleziona]

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:4.1.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://www.gambas-it.org"     ' testo di cui genereremo il 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)
   
' Usiamo i Memory-Stream per dereferenziare in tutta la sua dimensione
' la variabile di tipo "puntatore" del 3° campo della Struttura:
    ms = Memory result.data For Read
   
    For j = 0 To (result.width * result.width) - 1

      Read #ms, b
      If (b And 1) = 1 Then          ' Se il LSB del byte è uguale a 1, allora...
        Print String$(2, String.Chr(&2588));
      Else                                     ' se il LSB è invece uguale a zero, allora....
        Print Space(2);
      Endif
     
' Se abbiamo terminato di scrivere in console una riga del QR Code, allora andiamo a capo:
      If (j + 1) Mod result.width = 0 Then Print

    Next

' Va in chiusura:
    QRcode_free(result)

End
Titolo: Re:QR Code: creare l'immagine da un testo e viceversa
Inserito da: vuott - 12 Agosto 2017, 17:23:42
Per analogia di argomento vi segnalo questa pagina:

https://www.gambas-it.org/smf/index.php?topic=5856