• 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. }
  • 相关阅读:
    [HAOI2007][SDOI2005]反素数
    [UVa1636]Headshot
    [Codeforces 581D]Three Logos
    [NOIP2014普及组]子矩阵
    洛谷 P3299 [SDOI2013]保护出题人 解题报告
    洛谷 P3965 [TJOI2013]循环格 解题报告
    洛谷 P3989 [SHOI2013]阶乘字符串 解题报告
    [SHOI2013]发牌 解题报告
    洛谷 P3962 [TJOI2013]数字根 解题报告
    LOJ 2664. 「NOI2013」向量内积 解题报告
  • 原文地址:https://www.cnblogs.com/MaxWoods/p/1892440.html
Copyright © 2020-2023  润新知