vb.net+zxing.net随机彩色二维码、条形码

20 篇文章 1 订阅
3 篇文章 0 订阅

需要zxing库支持ZXing.NET Generate QR Code & Barcode in C# Alternatives | IronBarcode

效果图:

思路:先生成1个单位的二维码,然后再通过像素填充颜色,颜色数组要通过洗牌算法

洗牌算法

Dim shuffledCards As New List(Of Color)

 Sub GenColor()
     shuffledCards.Clear()

     Dim cards() = {Color.Red, Color.Blue, Color.Green,  Color.Black, Color.Brown}

     For i = 0 To 40
         shuffledCards.AddRange(ShuffleArray(cards))
     Next

 End Sub

 ' Fisher-Yates洗牌算法实现  
 Function ShuffleArray(ByVal array() As Color) As Color()
     Dim currentIndex As Integer = array.Length
     Dim random As New Random()

     ' 当还剩有元素未洗牌时  
     While currentIndex > 0
         ' 选取一个0到currentIndex之间的随机索引  
         Dim randomIndex As Integer = random.Next(currentIndex)
         currentIndex -= 1

         ' 交换当前元素和随机索引处的元素  
         Dim temp As Color = array(currentIndex)
         array(currentIndex) = array(randomIndex)
         array(randomIndex) = temp
     End While

     ' 返回洗牌后的数组  
     Return array
 End Function

色块识别、填充算法(二维码的生成):

Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
    Dim qr = New Bitmap(GenByZXingNet_Color(Content.Text))
    If CBRandColor.Checked = True Then
        GenColor()
    Dim k As Integer
        For i = 0 To qr.Height - 1
            For j = 0 To qr.Width - 1
                Dim c = qr.GetPixel(j, i)
                If CInt(c.R) + CInt(c.G) + CInt(c.B) = 0 Then
                    qr.SetPixel(j, i, shuffledCards(k))
                End If
                k += 1
                If k > shuffledCards.Count - 1 Then
                    k = 0
                End If
            Next
        Next
    End If
    Dim zk As Integer = CInt(ZoomK.Value)
    Dim NewQr = New Bitmap(qr.Width * zk, qr.Height * zk)
    For i = 0 To qr.Height - 1
        For j = 0 To qr.Width - 1
            Dim c = qr.GetPixel(j, i)
            Dim g = Graphics.FromImage(NewQr)
            g.FillRectangle(New SolidBrush(c), New Rectangle(j * zk, i * zk, zk, zk))
        Next
    Next
    DestImg.Image = NewQr
End Sub
Public Shared Function GenByZXingNet_Color(ByVal msg As String, ByVal Optional codeSizeInPixels As Integer = 250) As Bitmap
    Dim writer As BarcodeWriter = New BarcodeWriter()
    'writer.Renderer = New ZXing.Rendering.BitmapRenderer With {
    '        .Background = Color.White,
    '       .Foreground = Color.Black
    '   }
    writer.Format = BarcodeFormat.QR_CODE

    'writer.Options.Hints.Add(EncodeHintType.CHARACTER_SET, "UTF-8")
    'writer.Options.Hints.Add(EncodeHintType.ERROR_CORRECTION, ZXing.QrCode.Internal.ErrorCorrectionLevel.H)
    writer.Options.Height = 1
    writer.Options.Width = 1
    writer.Options.Margin = 0
    Dim img As Bitmap = writer.Write(msg)
    Return img
End Function

条形码的生成

Private Sub Button3_Click(sender As Object, e As EventArgs) Handles Button3.Click
    Dim options = New ZXing.Common.EncodingOptions()

    'options.Height = 120
    'options.Width = 200
    Dim Writer = New ZXing.BarcodeWriter()

    'writer.Options = options
    Writer.Format = ZXing.BarcodeFormat.CODE_128

    Dim qr = Writer.Write(Content.Text)


    DestImg.Image = qr
End Sub

保存

Private Sub Button2_Click(sender As Object, e As EventArgs) Handles Button2.Click
    Dim save As New SaveFileDialog
    save.Filter = "PNG File|*.png|JPG File|*.jpg|BMP File|*.bmp|All File|*.*"
    save.Title = "选择保存位置"
    save.FileName = Content.Text
    If save.ShowDialog() = DialogResult.OK Then
        DestImg.Image.Save(save.FileName)
    End If

End Sub

  • 10
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
使用.NET可以使用ZXing库来识别条形码ZXing(也称作Zebra Crossing)是一个开源的条码扫描和生成库,可以识别多种类型的条形码,例如QR码、条形码等等。 要使用ZXing来识别条形码,首先需要在系统中安装ZXing库。可以通过下载ZXing的最新版本,并将其添加到您的项目中。您可以在官方网站上找到ZXing的最新版本。 一旦您将ZXing库添加到项目中,可以使用如下代码来识别条形码: ```csharp using ZXing; public class BarcodeReader { public string ReadBarcode(string imagePath) { var reader = new BarcodeReader(); var result = reader.Decode(new Bitmap(imagePath)); if (result != null) { return result.Text; } return "未能识别条形码"; } } ``` 以上的代码创建了一个名为BarcodeReader的类,其中包含了一个ReadBarcode方法。该方法接受一个图像文件的路径作为输入参数,并返回识别到的条形码的文本。 在ReadBarcode方法中,首先创建了一个BarcodeReader的实例。然后,使用Decode方法来解码传入的图像文件,并将结果保存在result变量中。最后,如果result不为空,将返回result的文本表示,否则返回“未能识别条形码”。 调用这个BarcodeReader类的ReadBarcode方法,并传入一个包含条形码的图像文件的路径,就可以识别该条形码了。 总结来说,通过使用ZXing库和上述示例代码,您可以在.NET中实现条形码的识别功能。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值