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

news/2024/7/21 7:27:55 标签: .net, 图像处理, vb.net

需要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


http://www.niftyadmin.cn/n/5435704.html

相关文章

【Stable Diffusion】入门-04:不同模型分类+代表作品+常用下载网站+使用技巧

目录 1 模型简介2 模型文件构成和加载位置2.1 存储位置2.2 加载模型 3 模型下载渠道3.1 HuggingFace3.2 Civitai 4 模型分类4.1 二次元模型4.2 写实模型4.3 2.5D模型 1 模型简介 拿图片给模型训练的这个过程,通常被叫做“喂图”。模型学习的内容不仅包括对具体事物…

C语言如何初始化字符数组?

一、问题 字符数组如何初始化,与数值型数组有什么不同? 二、解答 字符数组的初始化操作有以下⼏种⽅法: (1)逐个字符赋给数组中各元素 这是最容易理解的初始化字符数组的⽅式。例如,初始化⼀个字符数组。…

Llama 2: 深入探讨ChatGPT的开源挑战者

Llama 2:开源挑战者深度解析 摘要 本文深入探讨了Llama 2的能力,并提供了在Google Colab上通过Hugging Face和T4 GPU设置这个高性能大型语言模型的详细指南。Llama 2是由Meta与Microsoft合作开发的开源大型语言模型,旨在重新定义生成式人工…

Git——分支详解

目录 Git分支1、开始使用分支1.1、新增分支1.2、更改分支名称1.3、删除分支1.4、切换分支1.5、切换分支时1.6、要切换到哪个分支,首先要有那个分支 2、分支原理2.1、单个分支2.2、多个分支2.3、切换分支时的逻辑1、更新暂存区和工作目录2、变更HEAD的位置 2.4、如果…

C/C++程序设计实验报告3 | 数组实验

本文整理自博主本科大一《C/C程序设计》专业课的课内实验报告,适合C语言初学者们学习、练习。 编译器:gcc 10.3.0 ---- 注: 1.虽然课程名为C程序设计,但实际上当时校内该课的内容大部分其实都是C语言,C的元素最多可能只…

Dify教程:Dify使用 Cloudflare Workers 设置API 扩展

🧙‍♂️ 诸位好,大家好,我是斜杠君。今天,为大家讲解在Dify中如何设置外部的API扩展,部署方式使用Cloudflare Workers。 🚀 若此文对阁下有所裨益,敬请👍🏻-点赞 ⭐ - 收…

【SpringBoot】请求与响应参数 IoC与DI 总结

文章目录 ① —— 请求 ——一、简单参数 RequestParam1.1 参数与形参 命名相同1.2 参数与形参 命名不同 二、实体参数2.1 简单实体对象2.2 复杂实体对象 三、数组集合参数3.1 数组3.2 集合 RequestParam 四、日期参数 DateTimeFormat五、JSON参数 RequestBody六、路径参数 Pat…

CCD视觉检测:揭开未来质量检测新篇章——康耐德智能

随着科技的不断进步,传统的人工检测方式已经无法满足现代工业生产对效率和精度的双重需求。而CCD视觉检测技术的出现,正为我们提供了一种全新的解决方案。那么,什么是CCD视觉检测?它又能为我们检测哪些方面的内容呢?今…