C#绘制条码CODE39和CODE39全码模式

使用

  1.   MyImage.BandCode.Code39 _Code39 = new MyImage.BandCode.Code39();
  2.             _Code39.Height = 120;
  3.             _Code39.Magnify = 1;
  4.             _Code39.ViewFont = new Font("宋体", 20);
  5.             pictureBox1.Image = _Code39.GetCodeImage("123ABC4567890", MyImage.BandCode.Code39.Code39Model.Code39Normal, true);
  6.             pictureBox1.Image.Save(@"C:\1.bmp");

  

  

全部代码

 

  1. using System;
  2. using System.Collections;
  3. using System.ComponentModel;
  4. using System.Drawing;
  5. using System.Data;
  6. namespace MyImage.BandCode
  7. {
  8.     /// <summary>
  9.     /// Code39编码
  10.     /// zgke@sina.com
  11.     /// qq:116149
  12.     /// </summary>
  13.     public class Code39
  14.     {
  15.         private Hashtable m_Code39 = new Hashtable();
  16.         private byte m_Magnify = 0;
  17.         /// <summary>
  18.         /// 放大倍数
  19.         /// </summary>
  20.         public byte Magnify { get {return m_Magnify; }set{m_Magnify=value;} }
  21.         
  22.         private int m_Height = 40;
  23.         /// <summary>
  24.         /// 图形高
  25.         /// </summary>
  26.         public int Height { get { return m_Height; } set { m_Height = value; } }
  27.         
  28.         private Font m_ViewFont = null;
  29.         /// <summary>
  30.         /// 字体大小
  31.         /// </summary>
  32.         public Font ViewFont { get { return m_ViewFont; } set { m_ViewFont = value; } }
  33.         
  34.         public Code39()
  35.         {
  36.            
  37.             m_Code39.Add("A""1101010010110");
  38.             m_Code39.Add("B""1011010010110");
  39.             m_Code39.Add("C""1101101001010");
  40.             m_Code39.Add("D""1010110010110");
  41.             m_Code39.Add("E""1101011001010");
  42.             m_Code39.Add("F""1011011001010");
  43.             m_Code39.Add("G""1010100110110");
  44.             m_Code39.Add("H""1101010011010");
  45.             m_Code39.Add("I""1011010011010");
  46.             m_Code39.Add("J""1010110011010");
  47.             m_Code39.Add("K""1101010100110");
  48.             m_Code39.Add("L""1011010100110");
  49.             m_Code39.Add("M""1101101010010");
  50.             m_Code39.Add("N""1010110100110");
  51.             m_Code39.Add("O""1101011010010");
  52.             m_Code39.Add("P""1011011010010");
  53.             m_Code39.Add("Q""1010101100110");
  54.             m_Code39.Add("R""1101010110010");
  55.             m_Code39.Add("S""1011010110010");
  56.             m_Code39.Add("T""1010110110010");
  57.             m_Code39.Add("U""1100101010110");
  58.             m_Code39.Add("V""1001101010110");
  59.             m_Code39.Add("W""1100110101010");
  60.             m_Code39.Add("X""1001011010110");
  61.             m_Code39.Add("Y""1100101101010");
  62.             m_Code39.Add("Z""1001101101010");
  63.             m_Code39.Add("0""1010011011010");
  64.             m_Code39.Add("1""1101001010110");
  65.             m_Code39.Add("2""1011001010110");
  66.             m_Code39.Add("3""1101100101010");
  67.             m_Code39.Add("4""1010011010110");
  68.             m_Code39.Add("5""1101001101010");
  69.             m_Code39.Add("6""1011001101010");
  70.             m_Code39.Add("7""1010010110110");
  71.             m_Code39.Add("8""1101001011010");
  72.             m_Code39.Add("9""1011001011010");
  73.             m_Code39.Add("+""1001010010010");
  74.             m_Code39.Add("-""1001010110110");
  75.             m_Code39.Add("*""1001011011010");
  76.             m_Code39.Add("/""1001001010010");
  77.             m_Code39.Add("%""1010010010010");
  78.             m_Code39.Add("$""1001001001010");
  79.             m_Code39.Add(".""1100101011010");
  80.             m_Code39.Add(" ""1001101011010");
  81.         }
  82.         
  83.         public enum Code39Model
  84.         {
  85.             /// <summary>
  86.             /// 基本类别 1234567890ABC
  87.             /// </summary>
  88.             Code39Normal,
  89.             /// <summary>
  90.             /// 全ASCII方式 +A+B 来表示小写
  91.             /// </summary>
  92.             Code39FullAscII
  93.         }
  94.         /// <summary>
  95.         /// 获得条码图形
  96.         /// </summary>
  97.         /// <param name="p_Text">文字信息</param>
  98.         /// <param name="p_Model">类别</param>
  99.         /// <param name="p_StarChar">是否增加前后*号</param>
  100.         /// <returns>图形</returns>
  101.         public Bitmap GetCodeImage(string p_Text, Code39Model p_Model, bool p_StarChar)
  102.         {
  103.             string _ValueText = "";
  104.             string _CodeText = "";
  105.             char[] _ValueChar = null;
  106.             switch (p_Model)
  107.             {
  108.                 case Code39Model.Code39Normal:
  109.                     _ValueText = p_Text.ToUpper();
  110.                     break;
  111.                 default:
  112.                     _ValueChar=p_Text.ToCharArray();
  113.                     for (int i = 0; i != _ValueChar.Length; i++)
  114.                     {
  115.                         if ((int)_ValueChar[i] >= 97 && (int)_ValueChar[i] <= 122)
  116.                         {
  117.                             _ValueText +="+"+ _ValueChar[i].ToString().ToUpper();
  118.                             
  119.                         }
  120.                         else
  121.                         {
  122.                             _ValueText += _ValueChar[i].ToString();
  123.                         }
  124.                     }
  125.                     break;
  126.             }
  127.             _ValueChar = _ValueText.ToCharArray();
  128.             if (p_StarChar == true) _CodeText += m_Code39["*"];
  129.             for (int i = 0; i != _ValueChar.Length; i++)
  130.             {
  131.                 if (p_StarChar==true && _ValueChar[i] == '*'throw new Exception("带有起始符号不能出现*");
  132.                 object _CharCode=m_Code39[_ValueChar[i].ToString()];
  133.                 if (_CharCode == nullthrow new Exception("不可用的字符" + _ValueChar[i].ToString());
  134.                 _CodeText += _CharCode.ToString();
  135.             }
  136.             if (p_StarChar == true) _CodeText += m_Code39["*"];
  137.           
  138.             Bitmap _CodeBmp = GetImage(_CodeText);
  139.             GetViewImage(_CodeBmp, p_Text);
  140.             return _CodeBmp;
  141.         }
  142.         
  143.         /// <summary>
  144.         /// 绘制编码图形
  145.         /// </summary>
  146.         /// <param name="p_Text">编码</param>
  147.         /// <returns>图形</returns>
  148.         private Bitmap GetImage(string p_Text)
  149.         {
  150.             char[] _Value = p_Text.ToCharArray();
  151.             
  152.             //宽 == 需要绘制的数量*放大倍数 + 两个字的宽   
  153.             Bitmap _CodeImage = new Bitmap(_Value.Length * ((int)m_Magnify + 1) , (int)m_Height);
  154.             Graphics _Garphics = Graphics.FromImage(_CodeImage);
  155.             _Garphics.FillRectangle(Brushes.White, new Rectangle(0, 0, _CodeImage.Width, _CodeImage.Height));
  156.           
  157.             int _LenEx = 0;
  158.             for (int i = 0; i != _Value.Length; i++)
  159.             {
  160.                 int _DrawWidth = m_Magnify + 1;
  161.                 if (_Value[i] == '1')
  162.                 {
  163.                     _Garphics.FillRectangle(Brushes.Black, new Rectangle(_LenEx, 0, _DrawWidth, m_Height));
  164.                 }
  165.                 else
  166.                 {
  167.                     _Garphics.FillRectangle(Brushes.White, new Rectangle(_LenEx, 0, _DrawWidth, m_Height));
  168.                 }
  169.                 _LenEx += _DrawWidth;
  170.             }
  171.           
  172.             _Garphics.Dispose();
  173.             return _CodeImage;
  174.         }
  175.         /// <summary>
  176.         /// 绘制文字
  177.         /// </summary>
  178.         /// <param name="p_CodeImage">图形</param>
  179.         /// <param name="p_Text">文字</param>
  180.         private void GetViewImage(Bitmap p_CodeImage,string p_Text)
  181.         {
  182.             if (m_ViewFont == nullreturn;
  183.             Graphics _Graphics = Graphics.FromImage(p_CodeImage);
  184.             SizeF _FontSize = _Graphics.MeasureString(p_Text, m_ViewFont);
  185.             if (_FontSize.Width > p_CodeImage.Width || _FontSize.Height > p_CodeImage.Height - 20)
  186.             {
  187.                 _Graphics.Dispose();
  188.                 return;
  189.             }
  190.             int _StarHeight = p_CodeImage.Height - (int)_FontSize.Height;
  191.             _Graphics.FillRectangle(Brushes.White, new Rectangle(0, _StarHeight, p_CodeImage.Width,(int)_FontSize.Height));
  192.             int _StarWidth = (p_CodeImage.Width - (int)_FontSize.Width) / 2;
  193.             _Graphics.DrawString(p_Text, m_ViewFont, Brushes.Black, _StarWidth, _StarHeight);
  194.             _Graphics.Dispose();
  195.         }
  196.     }
  197. }
posted @ 2010-11-30 21:18  Max Woods  阅读(1198)  评论(0编辑  收藏  举报