[B3D, BP?] Code 39

Übersicht BlitzBasic Codearchiv

Neue Antwort erstellen

 

Phlox

Betreff: [B3D, BP?] Code 39

BeitragFr, Okt 10, 2008 8:35
Antworten mit Zitat
Benutzer-Profile anzeigen
Hi,

Da ich für mein Programm einen Code brauchte, um Strichcodes zu zeichnen, habe ich mal
etwas geschrieben. Es wird ein 3 of 9 / Code 39 Code. Als Vorgabe habe ich das hier genommen:
http://www.strichcodeservice.at/code39.htm (Danke BladeRunner).
Es könnte ja sein, dass es jemand gebrauchen kann. Da ich die entstandenen Strichcodes nicht nicht testen
konnte, ist die Benutzung auf eigene Gefahr.
Kleine Erklärung der Funktionen:

Make2Code39(code$,[adds=1],[bgcolorr=255],[bgcolorg=255],[bgcolorb=255],[cr=0],[cg=0],[cb=0])
code$ ist die zu "Verschlüsselnde" Zeichenkette. Darf A-B, 0-9, Sonderzeichen: SPACE, -, ., $, /, +, % sein.
(Nur Großbuchstaben und * Nur wenn adds=0)
adds ist die Option, ein * vor den Code zu machen.
Dies benötigen alle Strichcodescanner.
bgcolorr,bgcolorg,bgcolorb ist die Hintergrundfarbe des Codes.
cr,cg,cb die Vordergrundfarbe.
cg sollte immer niedrig sein, da der Code von Scanner sonst möglicherweise nicht erkannt wird.

Ruckgabewert der Funktion ist ein BILD (Dimensionen:abhängig,330)!
Draw_39(start,s$) ist eine interne Funktion zum einfachen zeichnen.

Code: [AUSKLAPPEN]

Function Make2Code39(code$,adds=1,bgcolorr=255,bgcolorg=255,bgcolorb=255,cr=0,cg=0,cb=0)
   code$=Upper(code$)
   Local img2=CreateImage(8000,330)
   Local buffer=GraphicsBuffer(),xwert=10,D,F=LoadFont("Verdana",30,1),oldx
   SetFont F
   SetBuffer ImageBuffer(img2)
   ClsColor bgcolorr,bgcolorg,bgcolorb
   Cls
   Color cr,cg,cb
   If adds=1 Then
      xwert=Draw_39(xwert,"010010100")
      xwert=xwert+5
   Else
      xwert=10
   EndIf
   
   For D=1 To Len(code$)
      Select Mid(code$,D,1)
         Case "0"
            oldx=xwert
            xwert=Draw_39(xwert,"000110100")
            xwert=xwert+5
         Case "1"
            oldx=xwert
            xwert=Draw_39(xwert,"100100001")
            xwert=xwert+5
         Case "2"
            oldx=xwert
            xwert=Draw_39(xwert,"001100001")
            xwert=xwert+5
         Case "3"
            oldx=xwert
            xwert=Draw_39(xwert,"101100000")
            xwert=xwert+5
         Case "4"
            oldx=xwert
            xwert=Draw_39(xwert,"000110001")
            xwert=xwert+5
         Case "5"
            oldx=xwert
            xwert=Draw_39(xwert,"100110000")
            xwert=xwert+5
         Case "6"
            oldx=xwert
            xwert=Draw_39(xwert,"001110000")
            xwert=xwert+5
         Case "7"
            oldx=xwert
            xwert=Draw_39(xwert,"000100101")
            xwert=xwert+5
         Case "8"
            oldx=xwert
            xwert=Draw_39(xwert,"100100100")
            xwert=xwert+5
         Case "9"
            oldx=xwert
            xwert=Draw_39(xwert,"001100100")
            xwert=xwert+5
         Case "A"
            oldx=xwert
            xwert=Draw_39(xwert,"100001001")
            xwert=xwert+5
         Case "B"
            oldx=xwert
            xwert=Draw_39(xwert,"001001001")
            xwert=xwert+5
         Case "C"
            oldx=xwert
            xwert=Draw_39(xwert,"101001000")
            xwert=xwert+5
         Case "D"
            oldx=xwert
            xwert=Draw_39(xwert,"000011001")
            xwert=xwert+5
         Case "E"
            oldx=xwert
            xwert=Draw_39(xwert,"100011000")
            xwert=xwert+5
         Case "F"
            oldx=xwert
            xwert=Draw_39(xwert,"001011000")
            xwert=xwert+5
         Case "G"
            oldx=xwert
            xwert=Draw_39(xwert,"000001101")
            xwert=xwert+5
         Case "H"
            oldx=xwert
            xwert=Draw_39(xwert,"100001100")
            xwert=xwert+5
         Case "I"
            oldx=xwert
            xwert=Draw_39(xwert,"001001100")
            xwert=xwert+5
         Case "J"
            oldx=xwert
            xwert=Draw_39(xwert,"000011100")
            xwert=xwert+5
         Case "K"
            oldx=xwert
            xwert=Draw_39(xwert,"100000011")
            xwert=xwert+5
         Case "L"
            oldx=xwert
            xwert=Draw_39(xwert,"001000011")
            xwert=xwert+5
         Case "M"
            oldx=xwert
            xwert=Draw_39(xwert,"101000010")
            xwert=xwert+5
         Case "N"
            oldx=xwert
            xwert=Draw_39(xwert,"000010011")
            xwert=xwert+5
         Case "O"
            oldx=xwert
            xwert=Draw_39(xwert,"100010010")
            xwert=xwert+5
         Case "P"
            oldx=xwert
            xwert=Draw_39(xwert,"001010010")
            xwert=xwert+5
         Case "Q"
            oldx=xwert
            xwert=Draw_39(xwert,"000000111")
            xwert=xwert+5
         Case "R"
            oldx=xwert
            xwert=Draw_39(xwert,"100000110")
            xwert=xwert+5
         Case "S"
            oldx=xwert
            xwert=Draw_39(xwert,"001000110")
            xwert=xwert+5
         Case "T"
            oldx=xwert
            xwert=Draw_39(xwert,"000010110")
            xwert=xwert+5
         Case "U"
            oldx=xwert
            xwert=Draw_39(xwert,"110000001")
            xwert=xwert+5
         Case "V"
            oldx=xwert
            xwert=Draw_39(xwert,"011000001")
            xwert=xwert+5
         Case "W"
            oldx=xwert
            xwert=Draw_39(xwert,"111000000")
            xwert=xwert+5
         Case "X"
            oldx=xwert
            xwert=Draw_39(xwert,"010010001")
            xwert=xwert+5
         Case "Y"
            oldx=xwert
            xwert=Draw_39(xwert,"110010000")
            xwert=xwert+5
         Case "Z"
            oldx=xwert
            xwert=Draw_39(xwert,"011010000")
            xwert=xwert+5
         Case "-"
            oldx=xwert
            xwert=Draw_39(xwert,"010000101")
            xwert=xwert+5
         Case "."
            oldx=xwert
            xwert=Draw_39(xwert,"110000100")
            xwert=xwert+5
         Case " "
            oldx=xwert
            xwert=Draw_39(xwert,"011000100")
            xwert=xwert+5
         Case "*";!ACHTUNG!!! BEENDET DEN STRICHCODE!!!
            oldx=xwert
            xwert=Draw_39(xwert,"010010100")
            xwert=xwert+5
         Case "$"
            oldx=xwert
            xwert=Draw_39(xwert,"010101000")
            xwert=xwert+5
         Case "/"
            oldx=xwert
            xwert=Draw_39(xwert,"010100010")
            xwert=xwert+5
         Case "%"
            oldx=xwert
            xwert=Draw_39(xwert,"000101010")
            xwert=xwert+5
         Default
            oldx=xwert
            Color 0,0,255
            xwert=Draw_39(xwert,"111111111")
            Color cr,cg,cb
            xwert=xwert+15
      End Select
      Text ((xwert-oldx)/2)+oldx,295,Mid(code$,D,1),1,0
   Next
   
   Color cr,cg,cb
   If adds=1 Then
      xwert=Draw_39(xwert,"010010100")
   EndIf
   

   
   Local img=CreateImage(xwert+40,330)
   SetBuffer ImageBuffer(img)
   Cls
   SetBuffer ImageBuffer(img2)
   CopyRect 0,0,xwert+10,330,15,0,ImageBuffer(img2),ImageBuffer(img)
   FreeImage img2

   SetBuffer buffer   
   MaskImage img,255,0,255
   FreeFont F
   Return img
End Function

Function Draw_39(start,s$)
   Local M,mode=1,d=0
   For M=1 To Len(s$)
      If mode=1 Then
         If Mid(s$,M,1)="1" Then
            Rect start,10,15,280
            start=start+15
            mode=2
            d=1
         Else
            Rect start,10,10,280
            start=start+10
            mode=2
            d=1
         EndIf
      EndIf
      
      If mode=2 And d=0 Then
         If Mid(s$,M,1)="1" Then
            start=start+15
            mode=1
         Else
            start=start+5
            mode=1
         EndIf
      EndIf
      d=0
   Next
   Return start
End Function


Beispiel:
Code: [AUSKLAPPEN]
Graphics 1024,768,32,2
DrawImage Make2Code39("CODE",1,255,255,0,0,0,100),0,0
DrawImage Make2Code39("12345",1),0,340
WaitKey
End


MfG

P.S.: Könnte jemand überprüfen, ob die Strichcodes funktionieren?
  • Zuletzt bearbeitet von Phlox am Sa, Okt 11, 2008 12:03, insgesamt 4-mal bearbeitet

Falling.down

Betreff: Strichcodes

BeitragFr, Okt 10, 2008 10:43
Antworten mit Zitat
Benutzer-Profile anzeigen
Bei mir funktionieren die Strichcodes =)

sieht gut aus!

ozzi789

BeitragFr, Okt 10, 2008 11:03
Antworten mit Zitat
Benutzer-Profile anzeigen
Das ist echt kewl & interessant Smile
0x2B || ! 0x2B
C# | C++13 | Java 7 | PHP 5
 

Phlox

BeitragFr, Okt 10, 2008 12:54
Antworten mit Zitat
Benutzer-Profile anzeigen
Ich meinte eigentlich mit einem Strichcodescanner.
Schön, dass es euch gefällt.
EDIT: Kleines Update... *am Ende wird nun richtig gezeichnet!
EDIT2:Update!!!! Wichtig!! Sonst malt ihr in den Imagebuffer!!!

MfG
  • Zuletzt bearbeitet von Phlox am Fr, Okt 10, 2008 13:24, insgesamt einmal bearbeitet

Silver_Knee

BeitragFr, Okt 10, 2008 13:04
Antworten mit Zitat
Benutzer-Profile anzeigen
wenn hier in Hessen die Schule wieder anfängt kann ichs mal testen, da ich im Büchereiteam bin und wir nen Scanner haben um den Leuten einzuscannen welche Bücher sie haben...
 

dgxjerry

BeitragFr, Okt 10, 2008 16:08
Antworten mit Zitat
Benutzer-Profile anzeigen
Ach, du auch? Ich finds immer lustig, dass ich so die ersten und letzten 2 wochen schule schwänzen kann ^^
Also es wär echt cool wenns in unser System in der Schule passt, weil wir die Strichcodes im Moment kaufen müssen.
I don't suffer from insanity - I enjoy every minute of it!

It's not a bug - It's a feature!

Neue Antwort erstellen


Übersicht BlitzBasic Codearchiv

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group