效果图:6903957188880

利用EAN13.cs类绘制方法

public System.Drawing.Image drawEAN13(string StrEAN13)
{//获取验证位char _ISBN = EAN13.EAN13ISBN(StrEAN13);//MessageBox.Show(_ISBN.ToString());EAN13 _EAN13Code = new EAN13();_EAN13Code.Magnify = 4;_EAN13Code.Heigth = 151;_EAN13Code.FontSize = 40;return _EAN13Code.GetCodeImage(StrEAN13);
}

EAN13.cs类源码

using System;
using System.Collections.Generic;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;namespace GraphicTest
{public class EAN13{private DataTable m_EAN13 = new DataTable();public EAN13(){m_EAN13.Columns.Add("ID");m_EAN13.Columns.Add("Type");m_EAN13.Columns.Add("A");m_EAN13.Columns.Add("B");m_EAN13.Columns.Add("C");m_EAN13.Rows.Add("0", "AAAAAA", "0001101", "0100111", "1110010");m_EAN13.Rows.Add("1", "AABABB", "0011001", "0110011", "1100110");m_EAN13.Rows.Add("2", "AABBAB", "0010011", "0011011", "1101100");m_EAN13.Rows.Add("3", "AABBBA", "0111101", "0100001", "1000010");m_EAN13.Rows.Add("4", "ABAABB", "0100011", "0011101", "1011100");m_EAN13.Rows.Add("5", "ABBAAB", "0110001", "0111001", "1001110");m_EAN13.Rows.Add("6", "ABBBAA", "0101111", "0000101", "1010000");m_EAN13.Rows.Add("7", "ABABAB", "0111011", "0010001", "1000100");m_EAN13.Rows.Add("8", "ABABBA", "0110111", "0001001", "1001000");m_EAN13.Rows.Add("9", "ABBABA", "0001011", "0010111", "1110100");}private uint m_Height = 40;/// <summary>/// 绘制高/// </summary>public uint Heigth { get { return m_Height; } set { m_Height = value; } }private byte m_FontSize = 0;/// <summary>/// 字体大小(宋体)/// </summary>public byte FontSize { get { return m_FontSize; } set { m_FontSize = value; } }private byte m_Magnify = 0;/// <summary>     /// 放大系数    /// </summary>public byte Magnify { get { return m_Magnify; } set { m_Magnify = value; } }public Bitmap GetCodeImage(string p_Text){if (p_Text.Length != 13) throw new Exception("数字不是13位!");string _CodeText = p_Text.Remove(0, 1);string _CodeIndex = "101";char[] _LeftType = GetValue(p_Text.Substring(0, 1), "Type").ToCharArray();for (int i = 0; i != 6; i++){_CodeIndex += GetValue(_CodeText.Substring(0, 1), _LeftType[i].ToString());_CodeText = _CodeText.Remove(0, 1);}_CodeIndex += "01010";for (int i = 0; i != 6; i++){_CodeIndex += GetValue(_CodeText.Substring(0, 1), "C");_CodeText = _CodeText.Remove(0, 1);}_CodeIndex += "101";return GetImage(_CodeIndex, p_Text);}/// <summary>/// 获取目标对应的数据/// </summary>/// <param name="p_Code">编码</param>/// <param name="p_Value">类型</param>        /// <returns>编码</returns>private string GetValue(string p_Value, string p_Type){if (m_EAN13 == null) return "";DataRow[] _Row = m_EAN13.Select("ID='" + p_Value + "'");if (_Row.Length != 1) throw new Exception("错误的编码" + p_Value.ToString());return _Row[0][p_Type].ToString();}/// <summary>/// 绘制编码图形/// </summary>/// <param name="p_Text">编码</param>/// <returns>图形</returns>private Bitmap GetImage(string p_Text, string p_ViewText){char[] _Value = p_Text.ToCharArray();int _FontWidth = 0;Font _MyFont = null;if (m_FontSize != 0){#region 获取符合大小的字体_MyFont = new Font("楷体", m_FontSize);Bitmap _MyFontBmp = new Bitmap(m_FontSize, m_FontSize);Graphics _FontGraphics = Graphics.FromImage(_MyFontBmp);for (byte i = m_FontSize; i != 0; i--){SizeF _DrawSize = _FontGraphics.MeasureString(p_ViewText.Substring(0, 1), _MyFont);if (_DrawSize.Height > m_FontSize){_MyFont = new Font("OCR-B", i);}else{_FontWidth = (int)_DrawSize.Width;break;}}#endregion}if (ScanDrawText(_MyFont, p_Text, _FontWidth) == false){_FontWidth = 0;m_FontSize = 0;}//宽 == 需要绘制的数量*放大倍数 + 两个字的宽   Bitmap _CodeImage = new Bitmap(_Value.Length * ((int)m_Magnify) + (_FontWidth * 2), (int)m_Height);Graphics _Garphics = Graphics.FromImage(_CodeImage);_Garphics.FillRectangle(Brushes.White, new Rectangle(0, 0, _CodeImage.Width, _CodeImage.Height));int _Height = 0;int _LenEx = _FontWidth;for (int i = 0; i != _Value.Length; i++){int _DrawWidth = m_Magnify;if (i == 0 || i == 2 || i == 46 || i == 48 || i == 92 || i == 94){_Height = (int)m_Height - 27;}else{_Height = (int)m_Height - m_FontSize;}if (_Value[i] == '1'){_Garphics.FillRectangle(Brushes.Black, new Rectangle(_LenEx+8, 0, _DrawWidth, _Height));}else{_Garphics.FillRectangle(Brushes.White, new Rectangle(_LenEx+8, 0, _DrawWidth, _Height));}_LenEx += _DrawWidth;}//绘制文字if (_FontWidth != 0 && m_FontSize != 0){_MyFont = new Font("OCR-B", 29,FontStyle.Regular);int _StarX = 0;int _StarY = (int)m_Height - _MyFont.Height+4;_Garphics.DrawString(p_ViewText.Substring(0, 1), _MyFont, Brushes.Black, -7, _StarY);_StarX = _FontWidth + (3 * (m_Magnify))+10;for (int i = 1; i < 7; i++){_Garphics.DrawString(p_ViewText.Substring(i, 1), _MyFont, Brushes.Black, _StarX + 28 * (i - 1), _StarY);}_StarX = _FontWidth + (50 * (m_Magnify));for (int i = 1; i < 7; i++){_Garphics.DrawString(p_ViewText.Substring(6 + i, 1), _MyFont, Brushes.Black, _StarX + 28 * (i - 1), _StarY);}}_Garphics.Dispose();return _CodeImage;}/// <summary>/// 判断字体是否大与绘制图形/// </summary>/// <param name="_MyFont">字体</param>/// <param name="p_Text">文字</param>/// <param name="p_Width">字体的宽</param>/// <returns>true可以绘制 False不可以绘制</returns>private bool ScanDrawText(Font _MyFont, string p_Text, int p_Width){if (_MyFont == null) return false;int _Width = (p_Text.Length - 6 - 5) * ((int)m_Magnify + 1);if ((p_Width * 12) > _Width) return false;return true;}/// <summary>/// 获得条码的最后一位(验证位)/// </summary>/// <param name="ANumbers">条码</param>/// <returns></returns>public static char EAN13ISBN(string _Numb){int _Sum = 0;int _i = 1;   //权值foreach (char _Char in _Numb){if ("0123456789".IndexOf(_Char) < 0) continue; // 非数字_Sum += (_Char - '0') * _i;_i = _i == 1 ? 3 : 1;}return "01234567890"[10 - _Sum % 10];}}
}

C#利用Graphics类绘制进阶--绘制商品69码EAN-13相关推荐

  1. 学以致用——Java源码——使用Graphics类drawRect方法绘制表格(Grid Using Method drawRect)

    程序功能: 使用Graphics类drawRect方法绘制10*10表格. 运行结果: 源码: 1. 实体类 //Creating JFrame to display DrawPanel. impor ...

  2. java 中如何利用Graphics类绘图

    关于Graphics类的一个结论: Graphics类是所有图形上下文(Graphic context)的抽象基类,因此它是不能直接实例化的,那么为了使用Graphics类绘图,就必须创建其非抽象的子 ...

  3. C#利用Graphics类绘制进阶--绘制二维码

    效果图: 利用Gma.QrCodeNet.Encoding.dll文件进行绘制 下载地址:https://download.csdn.net/download/horseroll/10445288 无 ...

  4. C#利用Graphics类绘制进阶--根据文字内容自动生成指定旋转角度图片

    public System.Drawing.Image BuildBitmap(string content, System.Drawing.Font font, float py)//根据文字自动生 ...

  5. C#利用Graphics类绘制进阶--实现图片等比例缩放

    今天要用到,操作可以像画图工具一样,图片内容等比例缩放.但是在网上找了几个等比例缩放的方法,试了发现都是有问题的,基本都是你抄他,他抄你,而且也不试试这个方法到底能不能用就瞎抄.最后自己去看Graph ...

  6. C#利用Graphics类绘制进阶--绘制条形码Code128

    效果如图: 直接调用Code128.cs中的方法,输入内容即生成code128的image public System.Drawing.Image drawCode128(string StrCode ...

  7. Java Graphics类的绘图方法

    Graphics类提供基本绘图方法,Graphics2D类提供更强大的绘图能力.本节讲解Graphics类,下节讲解Graphics2D. Graphics类提供基本的几何图形绘制方法,主要有:画线段 ...

  8. java绘图之Graphics类

    1.画图实现原理 Component类中提供了三个与绘图有关的三个方法. paint(Graphics g):绘制组件的外观. update(Graphics g):调用paint方法,刷新组件外观 ...

  9. Graphics类绘制图形

    1. 画直线 void drawLine(int startX,int startY,int endX,int endY); 四个参数分别为:起始点的x坐标和y坐标以及终点的x坐标和y坐标,该方法用于 ...

最新文章

  1. Spring Security原理之springSecurityFilterChain
  2. telecom js
  3. linux18.04安装显卡驱动,详细介绍ubuntu18.04安装NVIDIA显卡驱动(亲测有效!)
  4. printf()详解之终极无惑-转载
  5. 【机器学习】银行贷款违约预测
  6. 分治算法---汉诺塔
  7. 机器学习的练功方式(四)——KNN算法
  8. js去除png格式的图片阴影
  9. JavaScript高级程序设计(第2版)pdf
  10. Linux-常用命令
  11. 航模的无刷电机到底是什么电机
  12. 神经网络 语音识别,神经网络语音合成
  13. 简单却巧妙,工程师创意太牛了!
  14. Python爬取美女主播图片适合初学者
  15. daimayuan每日一题#849 国家铁路
  16. 怎样实现url隐形转发?
  17. java获取时间并进行计算
  18. (附源码)ssm医务志愿者管理系统 毕业设计 100910
  19. web开发工具选择,html零基础入门书籍
  20. STM32 热敏电阻NTC的软件设计(ADC采集)

热门文章

  1. 使用SSH连接CentOS步骤
  2. webservice中cxf框架的HelloWord
  3. 必会Redis单节点、Sentinel和Cluster操作实战
  4. 某小公司:MySQL连环问
  5. 怎么用IDEA快速查看类图关系?
  6. 9000亿投资浪费在数字化转型,罪魁祸首在DevOps?
  7. 每日一技|巧用 Telnet 调试 Dubbo 服务
  8. 利用PySpark进行迁移学习的多类图像分类
  9. 私藏的7个实用工具,干货多到爆炸!
  10. 从 no-code 到 low-code 再到 pro-code