欢迎大家捧场:《Visual Basic.Net 循序渐进》
由于.net平台下C#和vb.NET很相似,本文也可以为C#爱好者提供的参考。
学习更多vb.net知识,请参看 vb.net 教程 目录
这是很早以前写的代码了,今天有网友需要,我就发到这里,可能有更多的人需要。
模块中的代码:
Module Module1
'''
''' 扫描线设置
'''
'''
Public Structure BarSetup
'''
''' 条码线高度
'''
'''
Dim intBqgd As Integer
'''
''' 是否启用标签
'''
'''
Dim blUseBq As Boolean
'''
''' 标签字体
'''
'''
Dim ftBqzt As Font
'''
''' 标签内容对齐方式
'''
'''
Dim intBqdq As Integer
'''
''' 条码起始位置Y
'''
'''
Dim intBqjl As Integer
End Structure
Public BarCodeSetup As BarSetup
End Module
窗体的设计很简单,就一个图片框,一个按钮,一个文本框。都使用的默认名称。
窗体中的代码:
Public Class Form1
Dim picHeight As Integer
Dim picWidth As Integer
Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
Dim picWidth As Integer = 300
Dim picHeight As Integer = 70
Dim bmp As Bitmap = DrawBarcode(TextBox1.Text, picWidth, picHeight)
PictureBox1.Image = bmp
End Sub
Private Function DrawBarcode(ByVal Code As String, ByVal picWidth As Integer, ByVal picHeight As Integer) As Bitmap
Dim myBmp As New Bitmap(picWidth, picHeight)
Dim g As Graphics = Graphics.FromImage(myBmp)
g.PageUnit = GraphicsUnit.Pixel
g.Clear(Color.White)
Dim mStringFormat As New StringFormat
Dim myBrush As New SolidBrush(Color.Black)
Dim myPen As New Pen(Color.Black)
'Dim myPen As New Pen(Color.Black, 0.2F)
Dim TextHeight As Integer
Dim LabelY As Integer
Dim myLabel As New Label
Dim bqzt As New Font("宋体", 10, FontStyle.Regular, GraphicsUnit.Point)
Dim nLine As Integer = 1
Dim wLine As Integer = nLine * 3
Dim PenW As New Pen(Color.Black, wLine)
Dim PenN As New Pen(Color.Black, nLine)
Dim z, X, Y, pos As Short
Dim Bardata As String
Dim Cur As String
Dim CurVal As Integer
Dim chksum As Integer
Dim BC(43) As String
BC(0) = "000110100" '0
BC(1) = "100100001" '1
BC(2) = "001100001" '2
BC(3) = "101100000" '3
BC(4) = "000110001" '4
BC(5) = "100110000" '5
BC(6) = "001110000" '6
BC(7) = "000100101" '7
BC(8) = "100100100" '8
BC(9) = "001100100" '9
BC(10) = "100001001" 'A
BC(11) = "001001001" 'B
BC(12) = "101001000" 'C
BC(13) = "000011001" 'D
BC(14) = "100011000" 'E
BC(15) = "001011000" 'F
BC(16) = "000001101" 'G
BC(17) = "100001100" 'H
BC(18) = "001001100" 'I
BC(19) = "000011100" 'J
BC(20) = "100000011" 'K
BC(21) = "001000011" 'L
BC(22) = "101000010" 'M
BC(23) = "000010011" 'N
BC(24) = "100010010" 'O
BC(25) = "001010010" 'P
BC(26) = "000000111" 'Q
BC(27) = "100000110" 'R
BC(28) = "001000110" 'S
BC(29) = "000010110" 'T
BC(30) = "110000001" 'U
BC(31) = "011000001" 'V
BC(32) = "111000000" 'W
BC(33) = "010010001" 'X
BC(34) = "110010000" 'Y
BC(35) = "011010000" 'Z
BC(36) = "010000101" '-
BC(37) = "110000100" '.
BC(38) = "011000100" '
BC(39) = "010101000" '$
BC(40) = "010100010" '/
BC(41) = "010001010" '+
BC(42) = "000101010" '%
BC(43) = "010010100" '* (used for start/stop character only)
pos = 0
Bardata = "*" & Code & "*"
For X = 1 To Len(Bardata)
Cur = Mid(Bardata, X, 1)
Select Case Cur
Case "0" To "9"
CurVal = Val(Cur)
Case "A" To "Z"
CurVal = Asc(Cur) - 55
Case "-"
CurVal = 36
Case "."
CurVal = 37
Case " "
CurVal = 38
Case "$"
CurVal = 39
Case "/"
CurVal = 40
Case "+"
CurVal = 41
Case "%"
CurVal = 42
Case "*"
CurVal = 43
Case Else
DrawBarcode = myBmp
Exit Function
End Select
chksum = chksum + CurVal
Next
For X = 1 To Len(Bardata)
Cur = Mid(Bardata, X, 1)
Select Case Cur
Case "0" To "9"
CurVal = Val(Cur)
Case "A" To "Z"
CurVal = Asc(Cur) - 55
Case "-"
CurVal = 36
Case "."
CurVal = 37
Case " "
CurVal = 38
Case "$"
CurVal = 39
Case "/"
CurVal = 40
Case "+"
CurVal = 41
Case "%"
CurVal = 42
Case "*"
CurVal = 43
End Select
For Y = 1 To 9
If Y Mod 2 = 0 Then '空
Select Case Mid(BC(CurVal), Y, 1)
Case "0" '窄
pos += nLine
Case "1" '宽
pos += wLine
End Select
Else '条码
Select Case Mid(BC(CurVal), Y, 1)
Case "0" '窄
g.DrawLine(PenN, pos, BarCodeSetup.intBqjl, pos, BarCodeSetup.intBqjl + BarCodeSetup.intBqgd)
pos += nLine
Case "1" '宽
For k As Integer = 0 To wLine - 1
g.DrawLine(PenN, pos, BarCodeSetup.intBqjl, pos, BarCodeSetup.intBqjl + BarCodeSetup.intBqgd)
pos += 1
Next
End Select
End If
Next
pos += nLine
Next
Dim Rect As New Rectangle(0, 0, pos, TextHeight)
LabelY = TextHeight + BarCodeSetup.intBqgd + IIf(BarCodeSetup.blUseBq, BarCodeSetup.intBqjl, 0)
Rect.X = 0
Rect.Y = LabelY
Rect.Width = pos
Rect.Height = myLabel.Height
If BarCodeSetup.blUseBq Then
mStringFormat.Alignment = BarCodeSetup.intBqdq
mStringFormat.LineAlignment = StringAlignment.Center
g.DrawString(Code, bqzt, myBrush, Rect, mStringFormat) '绘制条码对应的文字
End If
DrawBarcode = myBmp
End Function
Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load
BarCodeSetup.blUseBq = True
BarCodeSetup.ftBqzt = New Font("宋体", 12)
BarCodeSetup.intBqgd = 40
BarCodeSetup.intBqdq = 0
BarCodeSetup.intBqjl = 1
End Sub
End Class
将就手中的某件商品的编码生成的:
经过测试,淘宝和京东都可以识别出这个条码。



