Hallo Community,
Da ich mich zur Zeit sehr für alltagsnahe Darstellung von Texten und Ähnlichem interessiere habe ich mich mal an eine Klasse gemacht die Text zu einem 128BBarcode Kodieren kann. Diese sind wie folgt aufgebaut:
' Startsequenz + Umkodierter Text + Prüfsequenz + Stopsequenz
Startsequenz:
Prüfsequenz: Den Wert der Zeichen * Gewichtung Mod 103
Stopsequenz:
Das b steht hierbei für Black, also einen schwarzen Strich, w für Weiß. Die Leerzeichen dienen lediglich zur Gruppierung.
Die einzelnen Sequenzen für Zeichen können hier eingesehen werden: hi-tier.de/Entwicklung/technik/barcode_Code128.html
Hier die kommentierte Klasse(Da es sich um etwas eher simples handelt und wir hier im Sourcecodeautausch sind verzichte ich auf weitere Erläuterungen):
BarCode128B.vb
Verwendung:
Um die Dekodierungsfunktion werde ich mich im Laufe der nächsten Woche kümmern :). Hoffe jemand kann was damit anfangen.
Greetz faxe1008
Da ich mich zur Zeit sehr für alltagsnahe Darstellung von Texten und Ähnlichem interessiere habe ich mich mal an eine Klasse gemacht die Text zu einem 128BBarcode Kodieren kann. Diese sind wie folgt aufgebaut:
' Startsequenz + Umkodierter Text + Prüfsequenz + Stopsequenz
Startsequenz:
bb w b ww b wwww
Prüfsequenz: Den Wert der Zeichen * Gewichtung Mod 103
Stopsequenz:
bb www bbb w b w bb
Das b steht hierbei für Black, also einen schwarzen Strich, w für Weiß. Die Leerzeichen dienen lediglich zur Gruppierung.
Die einzelnen Sequenzen für Zeichen können hier eingesehen werden: hi-tier.de/Entwicklung/technik/barcode_Code128.html
Hier die kommentierte Klasse(Da es sich um etwas eher simples handelt und wir hier im Sourcecodeautausch sind verzichte ich auf weitere Erläuterungen):
VB.NET-Quellcode
- Option Strict On
- Imports System.Drawing
- Option Strict On
- Imports System.Drawing
- Public Class BarCode128B
- Private sign_dictonary As New Dictionary(Of Char, String)
- ''' <summary>
- ''' Lädt die Zeichen in das Wörterbuch
- ''' </summary>
- ''' <remarks></remarks>
- Private Sub Load_Dictonary()
- sign_dictonary.Clear()
- Add(" ", "bb w bb ww bb ww")
- Add("!", "bb ww bb w bb ww")
- Add("""", "bb ww bb ww bb w")
- Add("#", "b ww b ww bb www")
- Add("$", "b ww b www bb ww")
- Add("%", "b www b ww bb ww")
- Add("&", "b ww bb ww b www")
- Add("'", "b ww bb www b ww")
- Add("(", "b www bb ww b ww")
- Add(")", "bb ww b ww b www")
- Add("*", "bb ww b www b ww")
- Add("+", "bb www b ww b ww")
- Add(",", "b w bb ww bbb ww")
- Add("-", "b ww bb w bbb ww")
- Add(".", "b ww bb ww bbb w")
- Add("/", "b w bbb ww bb ww")
- Add("0", "b ww bbb w bb ww")
- Add("1", "b ww bbb ww bb w")
- Add("2", "bb ww bbb ww b w")
- Add("3", "bb ww b w bbb ww")
- Add("4", "bb ww b ww bbb w")
- Add("5", "bb w bbb ww b ww")
- Add("6", "bb ww bbb w b ww")
- Add("7", "bbb w bb w bbb w")
- Add("8", "bbb w b ww bb ww")
- Add("9", "bbb ww b w bb ww")
- Add(":", "bbb ww b ww bb w")
- Add(";", "bbb w bb ww b ww")
- Add("<", "bbb ww bb w b ww")
- Add("=", "bbb ww bb ww b w")
- Add(">", "bb w bb w bb www")
- Add("?", "bb w bb www bb w")
- Add("@", "bb www bb w bb w")
- Add("A", "b w b www bb www")
- Add("B", "b www b w bb www")
- Add("C", "b www b www bb w")
- Add("D", "b w bb www b www")
- Add("E", "b www bb w b www")
- Add("F", "b www bb www b w")
- Add("G", "bb w b www b www")
- Add("H", "bb www b w b www")
- Add("I", "bb www b www b w")
- Add("J", "b w bb w bbb www")
- Add("K", "b w bb www bbb w")
- Add("L", "b www bb w bbb w")
- Add("M", "b w bbb w bb www")
- Add("N", "b w bbb www bb w")
- Add("O", "b www bbb w bb w")
- Add("P", "bbb w bbb w bb w")
- Add("Q", "bb w b www bbb w")
- Add("R", "bb www b w bbb w")
- Add("S", "bb w bbb w b www")
- Add("T", "bb w bbb www b w")
- Add("U", "bb w bbb w bbb w")
- Add("V", "bbb w b w bb www")
- Add("W", "bbb w b www bb w")
- Add("X", "bbb www b w bb w")
- Add("Y", "bbb w bb w b www")
- Add("Z", "bbb w bb www b w")
- Add("[", "bbb www bb w b w")
- Add("", "bbb w bbbb w b w")
- Add("]", "bb ww b wwww b w")
- Add("^", "bbbb www b w b w")
- Add("_", "b w b ww bb wwww")
- Add("`", "b w b wwww bb ww")
- Add("a", "b ww b w bb wwww")
- Add("b", "b ww b wwww bb w")
- Add("c", "b wwww b w bb ww")
- Add("d", "b wwww b ww bb w")
- Add("e", "b w bb ww b wwww")
- Add("f", "b w bb wwww b ww")
- Add("g", "b ww bb w b wwww")
- Add("h", "b ww bb wwww b w")
- Add("i", "b wwww bb w b ww")
- Add("j", "b wwww bb ww b w")
- Add("k", "bb wwww b ww b w")
- Add("l", "bb ww b w b wwww")
- Add("m", "bbbb w bbb w b w")
- Add("n", "bb wwww b w b ww")
- Add("o", "b www bbbb w b w")
- Add("p", "b w b ww bbbb ww")
- Add("q", "b ww b w bbbb ww")
- Add("r", "b ww b ww bbbb w")
- Add("s", "b w bbbb ww b ww")
- Add("t", "b ww bbbb w b ww")
- Add("u", "b ww bbbb ww b w")
- Add("v", "bbbb w b ww b ww")
- Add("w", "bbbb ww b w b ww")
- Add("x", "bbbb ww b ww b w")
- Add("y", "bb w bb w bbbb w")
- Add("z", "bb w bbbb w bb w")
- Add("{", "bbbb w bb w bb w")
- Add("|", "b w b w bbbb www")
- Add("}", "b w b www bbbb w")
- Add("~", "b www b w bbbb w")
- End Sub
- ''' <summary>
- ''' Verkürzung von sign_dictonary.Add()
- ''' </summary>
- ''' <param name="char"></param>
- ''' <param name="code"></param>
- ''' <remarks></remarks>
- Private Sub Add(ByVal [char] As String, ByVal code As String)
- sign_dictonary.Add(CChar([char]), code)
- End Sub
- #Region "Encoder"
- ''' <summary>
- ''' Gibt Index des Zeichens zurück
- ''' </summary>
- ''' <param name="char"></param>
- ''' <returns></returns>
- ''' <remarks></remarks>
- Private Function GetIndex(ByVal [char] As Char) As Integer
- For u As Integer = 0 To sign_dictonary.Count - 1
- If sign_dictonary.Keys(u) = [char] Then
- Return u
- End If
- Next
- End Function
- ''' <summary>
- ''' Konvertiert eine Zeichenfolge in Black and White Stripes
- ''' </summary>
- ''' <param name="text">Zu Übersetzender Text</param>
- ''' <returns></returns>
- ''' <remarks></remarks>
- Private Function Convert(ByVal text As String) As String
- Load_Dictonary()
- Dim returnstring As String = ""
- Dim prüfsumme As Double = 0
- Dim gewichtung As Integer = 1
- For Each cr As Char In text
- returnstring = returnstring & " " & sign_dictonary(cr)
- prüfsumme = prüfsumme + GetIndex(cr) * gewichtung
- gewichtung = gewichtung + 1
- Next
- prüfsumme = prüfsumme + 104
- Dim prüfsummenmod As Integer = CInt(prüfsumme Mod 103)
- Dim prüfensummenkodierung As String = sign_dictonary(sign_dictonary.Keys(prüfsummenmod))
- 'Beginncode & TextCode & StopCode
- Return ("bb w b ww b wwww" & returnstring.Substring(1, returnstring.Length - 1) & prüfensummenkodierung & "bb www bbb w b w bb").Replace(" ", "")
- End Function
- ''' <summary>
- ''' Kodiert eine Zeichenfolge in einen 128B-Barcode
- ''' </summary>
- ''' <param name="text">Der darzustellende Text</param>
- ''' <param name="height">Die Höhe des Barcodes</param>
- ''' <returns></returns>
- ''' <remarks></remarks>
- Public Function Encode(ByVal text As String, ByVal height As Integer) As Bitmap
- Dim kombination As String = Convert(text)
- Dim bmp As New Bitmap((kombination.Length), height)
- Dim gr As Graphics = Graphics.FromImage(bmp)
- With gr
- .SmoothingMode = Drawing2D.SmoothingMode.AntiAlias
- .TextRenderingHint = Drawing.Text.TextRenderingHint.AntiAlias
- .PixelOffsetMode = Drawing2D.PixelOffsetMode.HighQuality
- .InterpolationMode = Drawing2D.InterpolationMode.HighQualityBilinear
- .CompositingQuality = Drawing2D.CompositingQuality.HighQuality
- End With
- For u As Integer = 0 To kombination.Length - 1
- If kombination.Substring(u, 1) = "w" Then
- gr.FillRectangle(Brushes.White, New Rectangle(u, 0, 1, height))
- End If
- If kombination.Substring(u, 1) = "b" Then
- gr.FillRectangle(Brushes.Black, New Rectangle(u, 0, 1, height))
- End If
- Next
- Return bmp
- End Function
- #End Region
- End Class
Verwendung:
Um die Dekodierungsfunktion werde ich mich im Laufe der nächsten Woche kümmern :). Hoffe jemand kann was damit anfangen.
Greetz faxe1008
faxe1008
Dieser Beitrag wurde bereits 3 mal editiert, zuletzt von „faxe1008“ ()