BarCode barcode based on C GDI+ implementation method

  • 2020-05-10 18:42:00
  • OfStack

Bar code is very widely used in life, the specific bar code knowledge we baidu, bar code knowledge is necessary to understand the following code. If you're just using it, just take it out and use it.
Without further ado, go to the code


public Bitmap GetCode39(string sourceCode)
         {
             int leftMargin = 5;
             int topMargin = 0;
             int thickLength = 2;
             int narrowLength = 1;
             int barCodeHeight = 35;
             int intSourceLength = sourceCode.Length;
             string strEncode = "010010100"; // Add start code" * " .
             var font = new System.Drawing.Font("Segoe UI", 5);

             string AlphaBet = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ-. $/+%*";

             string[] Code39 = 
             {
                 /* 0 */ "000110100",  
                 /* 1 */ "100100001",  
                 /* 2 */ "001100001",  
                 /* 3 */ "101100000",
                 /* 4 */ "000110001",  
                 /* 5 */ "100110000",  
                 /* 6 */ "001110000",  
                 /* 7 */ "000100101",
                 /* 8 */ "100100100",  
                 /* 9 */ "001100100",  
                 /* A */ "100001001",  
                 /* B */ "001001001",
                 /* C */ "101001000",  
                 /* D */ "000011001",  
                 /* E */ "100011000",  
                 /* F */ "001011000",
                 /* G */ "000001101",  
                 /* H */ "100001100",  
                 /* I */ "001001100",  
                 /* J */ "000011100",
                 /* K */ "100000011",  
                 /* L */ "001000011",  
                 /* M */ "101000010",  
                 /* N */ "000010011",
                 /* O */ "100010010",  
                 /* P */ "001010010",  
                 /* Q */ "000000111",  
                 /* R */ "100000110",
                 /* S */ "001000110",  
                 /* T */ "000010110",  
                 /* U */ "110000001",  
                 /* V */ "011000001",
                 /* W */ "111000000",  
                 /* X */ "010010001",  
                 /* Y */ "110010000",  
                 /* Z */ "011010000",
                 /* - */ "010000101",  
                 /* . */ "110000100",  
                 /*' '*/ "011000100",
                 /* $ */ "010101000",
                 /* / */ "010100010",  
                 /* + */ "010001010",  
                 /* % */ "000101010",  
                 /* * */ "010010100"  
             };
             sourceCode = sourceCode.ToUpper();

             Bitmap objBitmap = new Bitmap(
               ((thickLength * 3 + narrowLength * 7) * (intSourceLength + 2)) + (leftMargin * 2),
               barCodeHeight + (topMargin * 2));
             Graphics objGraphics = Graphics.FromImage(objBitmap);

             objGraphics.FillRectangle(Brushes.White, 0, 0, objBitmap.Width, objBitmap.Height);

             for (int i = 0; i < intSourceLength; i++)
             {
                 // Illegal character check 
                 if (AlphaBet.IndexOf(sourceCode[i]) == -1 || sourceCode[i] == '*')
                 {
                     objGraphics.DrawString("Invalid Bar Code",
                       SystemFonts.DefaultFont, Brushes.Red, leftMargin, topMargin);
                     return objBitmap;
                 }
                 // coding 
                 strEncode = string.Format("{0}0{1}", strEncode,
                  Code39[AlphaBet.IndexOf(sourceCode[i])]);
             }

             strEncode = string.Format("{0}0010010100", strEncode); // Add end code" * " 

             int intEncodeLength = strEncode.Length;
             int intBarWidth;

             for (int i = 0; i < intEncodeLength; i++) // draw  Code39 barcode
             {
                 intBarWidth = strEncode[i] == '1' ? thickLength : narrowLength;
                 objGraphics.FillRectangle(i % 2 == 0 ? Brushes.Black : Brushes.White,
                  leftMargin, topMargin, intBarWidth, barCodeHeight);
                 leftMargin += intBarWidth;
             }

             // draw   Plain code 
             SizeF sizeF = objGraphics.MeasureString(sourceCode, font);
             float x=(objBitmap.Width - sizeF.Width) / 2;
             float y = objBitmap.Height - sizeF.Height;
             objGraphics.FillRectangle(Brushes.White, x, y, sizeF.Width, sizeF.Height);
             objGraphics.DrawString(sourceCode, font, Brushes.Black, x, y);

             return objBitmap;
         }

Create a new Winform program, drag an PictureBox control, and tie the image returned by the method to PictureBox to see the result.

The above code requires a reference to the System.Drawing namespace.

By the way, one of the easiest ways to do this is to download the barcode font and set the font as barcode font when you print it. But you can't ask every client to have that font. This is an obvious drawback, so this method is not recommended.


Related articles: