elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: Guía rápida para descarga de herramientas gratuitas de seguridad y desinfección


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación General
| | |-+  .NET (C#, VB.NET, ASP)
| | | |-+  Programación Visual Basic (Moderadores: LeandroA, seba123neo)
| | | | |-+  Código QR
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: 1 [2] Ir Abajo Respuesta Imprimir
Autor Tema: Código QR  (Leído 14,815 veces)
arfgh

Desconectado Desconectado

Mensajes: 45


Ver Perfil
Re: Código QR
« Respuesta #10 en: 27 Abril 2018, 23:51 pm »

si, puedo compilar otros sources. No sé lo que pasa para que no funcione, pero tienen que ser bien raro....


En línea

arfgh

Desconectado Desconectado

Mensajes: 45


Ver Perfil
Re: Código QR
« Respuesta #11 en: 28 Abril 2018, 13:27 pm »

amigo, ante la  imposibilidad de hacerlo funcionar, he optado pro usar esta otra dll para codificar texto a QR. Dede archivo  lo he conseguido pero la dll tiene una función llamada 'GetPNGW' o 'GetBitmapW' que no sé bien como usar desde vb6.

La dll se llama 'quricol32.dll', se habla de ella aquí:

https://perevoznyk.wordpress.com/2013/09/11/quricol-2-0-qr-code-generator/

http://delphi32.blogspot.com.es/2011/11/quricol-qr-code-generator-library.html

a ver si me puedes ayudar. Lo que pretendo es obtener el bitmap, no es archivo, y procesarla por medio de GDI+. No sé bien como llamar a esa función y como manejar el resultado.

Estoy intentando con 'GetPNGW' y para empezar no tengo claro como declarar la llamada:

Código:
Private Declare Sub GetPngStream _
                Lib "Resources\quricol32.dll" _
                Alias "GetPNGW" ( _
                ByVal Stream As variant, _
                ByVal text As String, _
                ByVal Margin As Integer, _
                ByVal PixelSize As Integer)

concretamente el parámetro Stream...


« Última modificación: 28 Abril 2018, 13:48 pm por arfgh » En línea

Serapis
Colaborador
***
Desconectado Desconectado

Mensajes: 3.351


Ver Perfil
Re: Código QR
« Respuesta #12 en: 30 Abril 2018, 00:04 am »

Me he descargado esa otra librería...

Toma la librería "quricol32.dll" y muévela a lacarpeta de tu proyecto... si no, no funcionará.

Te pego el código, necesario para guardarlo... fíjate que yo he usado la función para exportar como BMP, no importa, importa la firma de los parámetros...

Código
  1. Private Enum ErrorCorrectionLevel
  2.    LowQuality = 0
  3.    MediumQuality = 1
  4.    StandardQuality = 2
  5.    HighQuality = 3
  6. End Enum
  7.  
  8.  
  9. 'Private Declare Sub GuardarImagen Lib "quricol32.dll" Alias "GenerateBMPW" (ByVal file As String, ByVal text As String, ByVal margen As Long, ByVal pixelSize As Long, ByVal nivel As ErrorCorrectionLevel)  
  10.  
  11. ' multilínea para ver mejorcada parámetro.
  12. Private Declare Sub GuardarImagen Lib "quricol32.dll" Alias "GenerateBMPW" ( _
  13.     ByVal file As String, _
  14.     ByVal text As String, _
  15.     ByVal margen As Long, _
  16.     ByVal pixelSize As Long, _
  17.     ByVal nivel As ErrorCorrectionLevel)  
  18.  
  19.  
  20. Private Sub Command1_Click()
  21.    Dim ruta As String, ruta2w As String, msg As String
  22.    Dim res As Long
  23.  
  24.    msg = StrConv("Probando la librería Quricol...", vbUnicode) ' <--- Ojo: 4 bytes por carácter.
  25.    ruta = App.Path & "\Qr.bmp"
  26.    ruta2w = StrConv(ruta, vbUnicode)   ' <---- OJO: 4bytes por carácter...
  27.    Call GuardarImagen(ruta2w, msg, 2, 3, HighQuality)
  28.  
  29.    If (Dir(ruta) <> "") Then
  30.        Set Image1.Picture = LoadPicture(ruta)
  31.    End If
  32. End Sub
  33.  
  34. Private Sub Form_Load()
  35.    Me.BackColor = vbBlack ' contraste para que destaque...
  36.    Image1.Stretch = True
  37. End Sub
  38.  
  39.  


p.d.: Olvidaba decirte, que para probarlo, necesitas un botón y un control image.
« Última modificación: 30 Abril 2018, 00:11 am por NEBIRE » En línea

arfgh

Desconectado Desconectado

Mensajes: 45


Ver Perfil
Re: Código QR
« Respuesta #13 en: 30 Abril 2018, 13:59 pm »

ya pero como te comenté lo que pretendo usar es obtener el stream, no el archivo.

Private Declare Sub GetPngStream _
                Lib "Resources\quricol32.dll" _
                Alias "GetPNGW"

No obstante muy buen ejemplo.
« Última modificación: 30 Abril 2018, 14:05 pm por arfgh » En línea

arfgh

Desconectado Desconectado

Mensajes: 45


Ver Perfil
Re: Código QR
« Respuesta #14 en: 30 Abril 2018, 14:09 pm »

ya pero como te comenté lo que pretendo usar es obtener el stream, no el archivo.

Private Declare Sub GetPngStream _
                Lib "Resources\quricol32.dll" _
                Alias "GetPNGW"

esta "quricol32.dll" si que funciona, no como la dll anterior, no obstante esta dll solamente codifica, no decodifica imágenes con código QR...

No obstante muy buen ejemplo.
En línea

Serapis
Colaborador
***
Desconectado Desconectado

Mensajes: 3.351


Ver Perfil
Re: Código QR
« Respuesta #15 en: 11 Mayo 2018, 01:11 am »

Perdona... no me di cuenta de tu mensaje hasta hoy que respondía a otro usuario...

El caso, es que falla por varias cuestiones, la primera es que en Delphi, no tienen NPI de lo que es un variant, en segundo lugar, porque la firma de la API es incorrecta...

Te pongo todo el código al caso (incluído el previo)... no te he puesto el tratamiento del png recibido, toda vez que tu señalas que quieres operarlo después con GDI+

El proyecto, asumiendo el código previo anterior aún válido, exige un control image y dos controles de botón. El botón 1 para obtener un fichero bmp que luego cargamos en el control image. El botón 2 para obtener el stream del png (los bytes en memoria, tal cual si hubiéramos pedido un fichero png, y luego leído de disco (obtener el stream es más rápido desde luego, lectura y escritura a y desde disco siempre es más lento que copiar a y desde memoria)).
Código
  1. ' Declaraciones
  2.  
  3. ' Nivel de corrección para reconocer posibles fallos. A más calidad, más capacidad de recuperación, pero exige más carga de trabajo, etc...
  4. Private Enum ErrorCorrectionLevel
  5.    LowQuality = 0
  6.    MediumQuality = 1
  7.    StandardQuality = 2
  8.    HighQuality = 3
  9. End Enum
  10.  
  11. ' para copiar datos de memoria de un sitio a otro..
  12. Private Declare Sub CMem Lib "kernel32" Alias "RtlMoveMemory" (Destination As Any, Source As Any, ByVal Length As Long)
  13.  
  14. ' API, para obtener el codigo-QR en un fichero bmp.
  15. Private Declare Sub GuardarImagen Lib "quricol32.dll" Alias "GenerateBMPW" (ByVal file As String, ByVal text As String, ByVal Margen As Long, ByVal PixelSize As Long, ByVal nivel As ErrorCorrectionLevel)
  16. ' API, para obtener el stream en formato png.
  17. Private Declare Sub GetPngStream Lib "quricol32.dll" Alias "GetPNGW" (ByVal text As String, ByVal Margen As Integer, ByVal PixelSize As Integer, ByVal nivel As ErrorCorrectionLevel, ByRef bufSize As Long, ByRef ptrBits As Long)
  18.  

Código
  1. ' Código del botón, para obtener una imagen en formato BMP (luego la cargamos).
  2. Private Sub Command1_Click()
  3.    Dim ruta As String, ruta2w As String, msg As String
  4.    Dim res As Long
  5.  
  6.    msg = StrConv("Hola que tal estas", vbUnicode)
  7.    ruta = App.Path & "\Qr.bmp"
  8.    ruta2w = StrConv(ruta, vbUnicode)
  9.    Call GuardarImagen(ruta2w, msg, 2, 3, HighQuality)
  10.  
  11.    If (Dir(ruta) <> "") Then
  12.        Set Image1.Picture = LoadPicture(ruta)
  13.    End If
  14. End Sub
  15.  
  16. ' carga del formulario...
  17. Private Sub Form_Load()
  18.    Me.BackColor = vbBlack ' contraste para que destaque...
  19.    Image1.Stretch = True
  20. End Sub
  21.  

Código
  1. Private Sub Command2_Click()
  2.    Dim msg As String
  3.    Dim res As Long, k As Long, ptr As Long
  4.    Dim stm() As Byte
  5.  
  6.    msg = StrConv("Hola que tal estas", vbUnicode)
  7.  
  8.    Call GetPngStream(msg, 2, 3, HighQuality, k, ptr)
  9.  
  10.    If (k < 1) Then
  11.        MsgBox "No parece haberse recibido ninguna imagen..."
  12.    Else
  13.        ReDim stm(0 To k - 1)
  14.        Call CMem(ByVal VarPtr(stm(0)), ByVal ptr, k)
  15.  
  16.        ' tu código restante iría aquí:
  17.        ' yo sólo imprimo el valor de los bytes... para verificar que es correcto.
  18.        For j = 0 To k - 1
  19.            Debug.Print stm(j)
  20.        Next
  21.  
  22.        ' ...
  23.    End If
  24. End Sub
  25.  

Y en efecto, el volcado me arroja:
 137
 80
 78
 71
 13
 10
 26
 10
 0
 0
 0
 13
 73
 72
 68
 82
...
que son los bytes correspondientes a la cabecera de un png: "%PNG        IHDR"...

..y por último sólo recordarte que al final estamos usando la librería de Delphi Quricol32.dll, no el wrapper de C# Quricol.Barcode.dll.
« Última modificación: 11 Mayo 2018, 01:14 am por NEBIRE » En línea

Páginas: 1 [2] Ir Arriba Respuesta Imprimir 

Ir a:  

WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines