设为首页收藏本站

LUPA开源社区

 找回密码
 注册
文章 帖子 博客
LUPA开源社区 首页 业界资讯 技术文摘 查看内容

使用Google的Web API创建二维码

2015-1-14 12:02| 发布者: joejoe0332| 查看: 2420| 评论: 0|原作者: 2015, omccod, 无若, toddlt, Windows10|来自: oschina

摘要: 在这篇文章里我将会介绍一个简单的方法(使用内部的标准空间)用来创建二维码(QR Code), 记录关于UserControl的一切用以备查。有许多的库帮助我们做类似的操作,但是这次我要使用谷歌图表( Google Charts) (htt ...


  图片类型的变量可以通过读取流的方式进行初始化(就像我们打开本地的一张图片,会有一份本地流的副本)。既然在内存中我们有自己的字节,我们可以声明一个基于数组的MemoryStream,并且使用它作为位图的源。在这一点上,为了实现完美的工作位图,我们可以利用变量 e,其中的OnPaint事件可以访问自己,以此在我们控制的位置[0;0]绘制图像。


  编译我们的项目后,QRBox将出现在工具箱里,准备在Form上使用。


 


  使用它非常简单,只需要设置它的数据和属性,还有控制刷新的回调。


  接下来的简单Form例子会展示它是如何工作的。我已经向我的Form中添加了QrBox,一个标准的TextBox和Button。



  当用户按下“制作”按钮时,我们将会读到一段TextBox文本,并将其传送到QrBox Data Property中,并且触发刷新方法。为了开始针对谷歌Charts的远程查询,按按钮产生的代码将会简单如下:

1
2
3
4
Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
    QrBox1.Data = TextBox1.Text
    QrBox1.Refresh()
End Sub


UserControl的完整代码

QrBox UserControl的完整代码如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
Imports System.Net
  
Public Class QRBox
    Const _GOOGLE_URL As String "http://chart.googleapis.com/chart?chs={WIDTH}x{HEIGHT}&cht=qr&chl={DATA}"
    Dim _DATA As String String.Empty
  
    Property Data As String
        Get
            Return _DATA
        End Get
        Set(value As String)
            _DATA = value
        End Set
    End Property
  
    Private Function getQRURI() As String
        Dim _qrAddr As String = _GOOGLE_URL.Replace("{WIDTH}"Me.Width.ToString).Replace("{HEIGHT}"Me.Height.ToString)
        _qrAddr = _qrAddr.Replace("{DATA}", WebUtility.UrlEncode(_DATA))
  
        Return _qrAddr
    End Function
  
    Protected Overrides Sub OnPaint(e As PaintEventArgs)
        MyBase.OnPaint(e)
        If _DATA Is Nothing Then Exit Sub
  
        Dim client As New WebClient()
        Dim bytes() As Byte = client.DownloadData(getQRURI())
        client.Dispose()
  
        Dim memStream As New IO.MemoryStream(bytes)
        Dim bmp As Bitmap = Bitmap.FromStream(memStream)
        memStream.Dispose()
  
        e.Graphics.DrawImage(bmp, 0, 0)
    End Sub
  
    Public Sub New()
        InitializeComponent()
    End Sub
End Class

我希望本文对你的项目有用。

祝你编码愉快,工作愉快!



酷毙

雷人

鲜花

鸡蛋

漂亮
  • 快毕业了,没工作经验,
    找份工作好难啊?
    赶紧去人才芯片公司磨练吧!!

最新评论

关于LUPA|人才芯片工程|人才招聘|LUPA认证|LUPA教育|LUPA开源社区 ( 浙B2-20090187 浙公网安备 33010602006705号   

返回顶部