ZXING端口解码二维码失败

发布于 2024-11-14 12:50:36 字数 633 浏览 4 评论 0原文

我正在使用 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.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 阅读器,请推荐

I'm using the zxing C# port to decode a QR barcode.
The code is simple and based on an example I found online (see below).
The problem is, it always throws an "Index was outside the bounds of the array" exception.
My code sample happen to be in VB.NET, but the zxing library is implemented in 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.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()

I have seen multiple people complaining about the same issue in different forums, but haven't found any suggested solution.

UPDATE If anyone knows of a different good QR reader that can easily integrate with a .NET application, please recommend

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

2024-11-21 12:50:36

不知道这是否对您有帮助,但如果您想使用,我粘贴我的代码:

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

Dont know if this gonna help u, but i paste my code if u want to use:

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
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文