c# 生成条形码

from:http://blog.blueshop.com.tw/timothychi/articles/48836.aspx

 

using System.Drawing;

using System.Drawing.Imaging;

private Bitmap GetCode39(string strSource)

{

  int x = 5; //左邊界

  int y = 0; //上邊界

  int WidLength = 2; //BarCode長度

  int NarrowLength = 1; //BarCode長度

  int BarCodeHeight = 24; //BarCode高度

  int intSourceLength = strSource.Length;

  string strEncode = "010010100"; //編碼字串 初值為 起始符號 *

 

  string AlphaBet = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ-. $/+%*"; //Code39的字母

 

  string[] Code39 = //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"

  };

 

 

  strSource = strSource.ToUpper();

 

  //實作圖片

  Bitmap objBitmap = new Bitmap(

    ((WidLength * 3 + NarrowLength * 7) * (intSourceLength + 2)) + (x * 2),

    BarCodeHeight + (y * 2));

 

  Graphics objGraphics = Graphics.FromImage(objBitmap); //宣告GDI+繪圖介面

 

  //填上底色

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

 

  for (int i = 0; i < intSourceLength; i++)

  {

    if (AlphaBet.IndexOf(strSource[i]) == -1 || strSource[i] == '*') //檢查是否有非法字元

    {

      objGraphics.DrawString("含有非法字元", SystemFonts.DefaultFont, Brushes.Red, x, y);

      return objBitmap;

    }

    //查表編碼

    strEncode = string.Format("{0}0{1}", strEncode, Code39[AlphaBet.IndexOf(strSource[i])]);

  }

 

  strEncode = string.Format("{0}0010010100", strEncode); //補上結束符號 *

 

  int intEncodeLength = strEncode.Length; //編碼後長度

  int intBarWidth;

 

  for (int i = 0; i < intEncodeLength; i++) //依碼畫出Code39 BarCode

  {

    intBarWidth = strEncode[i] == '1' ? WidLength : NarrowLength;

    objGraphics.FillRectangle(i % 2 == 0 ? Brushes.Black : Brushes.White,

      x, y, intBarWidth , BarCodeHeight);

    x += intBarWidth;

  }

  return objBitmap; 

} 

posted @   94cool  阅读(367)  评论(0编辑  收藏  举报
(评论功能已被禁用)
编辑推荐:
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
阅读排行:
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· C#/.NET/.NET Core优秀项目和框架2025年2月简报
· Manus爆火,是硬核还是营销?
· 终于写完轮子一部分:tcp代理 了,记录一下
· 【杭电多校比赛记录】2025“钉耙编程”中国大学生算法设计春季联赛(1)
< 2010年4月 >
28 29 30 31 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 1
2 3 4 5 6 7 8
点击右上角即可分享
微信分享提示