Vb.net ZXING端口无法解码QR码
我正在使用zxing C端口解码QR条形码。 代码很简单,基于我在网上找到的一个示例,请参见下文。 问题是,它总是抛出一个超出数组异常范围的索引。 我的代码示例恰好在VB.NET中,但zxing库是用C实现的Vb.net ZXING端口无法解码QR码,vb.net,zxing,Vb.net,Zxing,我正在使用zxing C端口解码QR条形码。 代码很简单,基于我在网上找到的一个示例,请参见下文。 问题是,它总是抛出一个超出数组异常范围的索引。 我的代码示例恰好在VB.NET中,但zxing库是用C实现的 Dim re As qrcode.QRCodeReader re = New qrcode.QRCodeReader() Dim Img As New Bitmap("<image file path here>") Dim res As com.google.zxing.
Dim re As qrcode.QRCodeReader
re = New qrcode.QRCodeReader()
Dim Img As New Bitmap("<image file path here>")
Dim res As com.google.zxing.Result
Dim bufimg As com.google.zxing.client.j2se.BufferedImageMonochromeBitmapSource
bufimg = New client.j2se.BufferedImageMonochromeBitmapSource(Img, False)
res = re.decode(bufimg)
Dim ret As String = res.getText()
我在不同的论坛上看到很多人抱怨同一个问题,但没有找到任何建议的解决方案
更新如果有人知道可以轻松与.NET应用程序集成的其他优质QR阅读器,请推荐不知道这是否对你有帮助,但如果你想使用,我会粘贴我的代码:
Imports Zxing = com.google.zxing
Imports System.Drawing
Public Class Decodificador
'Para leer todo tipo de codigos soportados por el proyecto zxing
Private Reader As New Zxing.MultiFormatReader
'Private Reader As New Zxing.qrcode.QRCodeReader
Private Result As Zxing.Result
Private Imagen As Bitmap
Private Bitm As Zxing.BinaryBitmap
Private HBin As Zxing.common.HybridBinarizer
Private Lumin As RGBLuminanceSource
'El orden para poder funcionar es:
'DetectarCodigoEnImagen (Obligatorio) >> PintarLocalizacion [opcional] >> DecodificarImagen (Obligatorio para sacar info).
''' <summary>
''' Devuelve True si ha localizado un QRCODE
''' </summary>
''' <param name="img"></param>
''' <returns></returns>
''' <remarks></remarks>
Public Function DetectarCodigoEnImagen(ByRef img As Image) As Boolean
Try
Imagen = New Bitmap(img)
'Creamos un Mapa binario con la imagen y su tamaño
Lumin = New RGBLuminanceSource(Imagen, Imagen.Width, Imagen.Height)
HBin = New Zxing.common.HybridBinarizer(Lumin)
Bitm = New Zxing.BinaryBitmap(HBin)
'Decodificamos el mapa binario y guardamos todos los datos en Result
Result = Reader.decode(Bitm)
'Si ha encontrado un QRCode provocará una excepción y devolverá False
'Si hay un QRCode, devolverá True
Return True
Catch ex As Exception
Return False
End Try
End Function
''' <summary>
''' Dibuja cuadros rojos y amarillos en la localización del Codigo QR, ralentiza mucho el sistema.
''' Debe haberse detectado un codigo en la imagen para poder pintar.
''' Devuelve la imagen con el Codigo QR y la localización pintada
''' </summary>
''' <param name="img"></param>
''' <remarks></remarks>
Public Function PintarLocalizacionQrCode(ByRef img As Image) As Image
Try
'Archivamos en una matriz todos los puntos de localización del QRcode
Dim Puntos() As Zxing.ResultPoint = Result.ResultPoints
'Creamos Graficos desde la imagen y poder pintar posteriormente
Dim gr As Graphics = Graphics.FromImage(Imagen)
'Dim gr As Graphics = Graphics.FromImage(Imagen)
'Declaramos el tamaño del pincel para pintar y pintar2
Dim TamPincel As Integer = 4
Dim Pintar As New Pen(Color.Yellow, TamPincel)
Dim Pintar2 As New Pen(Color.Red, TamPincel)
'Declaramos una variable del mismo tipo que el arreglo Puntos() para poder navera por ella
Dim PuntoAuxiliar As com.google.zxing.ResultPoint
'Por cada punto en puntos() dibujamos 2 rectangulos en los indicadores de posición del QRCode
For Each PuntoAuxiliar In Puntos
gr.DrawRectangle(Pintar, New Rectangle(PuntoAuxiliar.X - 10, PuntoAuxiliar.Y - 10, 20, 20))
gr.DrawRectangle(Pintar2, New Rectangle(PuntoAuxiliar.X - 13, PuntoAuxiliar.Y - 13, 26, 26))
Next
'Liberamos la memoria
gr.Dispose()
Return Imagen
Catch ex As Exception
Throw ex
End Try
End Function
End Class
你说了两遍C,但我看到了VB代码。你应该根据你正在编写的代码来标记你的问题,而不是你正在使用的库。@Inuyasha主要的问题是czxing库。这些是应该触发响应和人们寻找罪恶搜索的关键词。我更新了这个问题,试图弄清楚这一点。图书馆是用什么写的并不重要。重要的是你正在编写的代码。有人在这方面取得了任何进展吗?