现在的位置: 首页 > 综合 > 正文

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

2013年12月05日 ⁄ 综合 ⁄ 共 7804字 ⁄ 字号 评论关闭

不使用字体来绘制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 == 
    null

    throw
     
    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 == 
    null

    return
    ;
  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.csdn.net/zgke/archive/2008/12/12/3503845.aspx

抱歉!评论已关闭.