C#绘制条码CODE39和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. }
http://blog.youkuaiyun.com/zgke/archive/2008/12/12/3503845.aspx

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值