手机
当前位置:查字典教程网 >编程开发 >C#教程 >BarCode条形码基于C# GDI+ 的实现方法详解
BarCode条形码基于C# GDI+ 的实现方法详解
摘要:条形码在生活中的应用非常广泛,具体的条形码知识大家自行百度,了解条形码知识对理解下面的代码是必要的。如果只是应用的话,直接拿去就可以用了。废...

条形码在生活中的应用非常广泛,具体的条形码知识大家自行百度,了解条形码知识对理解下面的代码是必要的。如果只是应用的话,直接拿去就可以用了。

废话不多说,上代码

复制代码 代码如下:

public Bitmap GetCode39(string sourceCode)

{

int leftMargin = 5;

int topMargin = 0;

int thickLength = 2;

int narrowLength = 1;

int barCodeHeight = 35;

int intSourceLength = sourceCode.Length;

string strEncode = "010010100"; //添加起始码“*”.

var font = new System.Drawing.Font("Segoe UI", 5);

string AlphaBet = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ-. $/+%*";

string[] Code39 =

{

/* 0 */ "000110100",

/* 1 */ "100100001",

/* 2 */ "001100001",

/* 3 */ "101100000",

/* 4 */ "000110001",

/* 5 */ "100110000",

/* 6 */ "001110000",

/* 7 */ "000100101",

/* 8 */ "100100100",

/* 9 */ "001100100",

/* A */ "100001001",

/* B */ "001001001",

/* C */ "101001000",

/* D */ "000011001",

/* E */ "100011000",

/* F */ "001011000",

/* G */ "000001101",

/* H */ "100001100",

/* I */ "001001100",

/* J */ "000011100",

/* K */ "100000011",

/* L */ "001000011",

/* M */ "101000010",

/* N */ "000010011",

/* O */ "100010010",

/* P */ "001010010",

/* Q */ "000000111",

/* R */ "100000110",

/* S */ "001000110",

/* T */ "000010110",

/* U */ "110000001",

/* V */ "011000001",

/* W */ "111000000",

/* X */ "010010001",

/* Y */ "110010000",

/* Z */ "011010000",

/* - */ "010000101",

/* . */ "110000100",

/*' '*/ "011000100",

/* $ */ "010101000",

/* / */ "010100010",

/* + */ "010001010",

/* % */ "000101010",

/* * */ "010010100"

};

sourceCode = sourceCode.ToUpper();

Bitmap objBitmap = new Bitmap(

((thickLength * 3 + narrowLength * 7) * (intSourceLength + 2)) + (leftMargin * 2),

barCodeHeight + (topMargin * 2));

Graphics objGraphics = Graphics.FromImage(objBitmap);

objGraphics.FillRectangle(Brushes.White, 0, 0, objBitmap.Width, objBitmap.Height);

for (int i = 0; i < intSourceLength; i++)

{

//非法字符校验

if (AlphaBet.IndexOf(sourceCode[i]) == -1 || sourceCode[i] == '*')

{

objGraphics.DrawString("Invalid Bar Code",

SystemFonts.DefaultFont, Brushes.Red, leftMargin, topMargin);

return objBitmap;

}

//编码

strEncode = string.Format("{0}0{1}", strEncode,

Code39[AlphaBet.IndexOf(sourceCode[i])]);

}

strEncode = string.Format("{0}0010010100", strEncode); //添加结束码“*”

int intEncodeLength = strEncode.Length;

int intBarWidth;

for (int i = 0; i < intEncodeLength; i++) //绘制 Code39 barcode

{

intBarWidth = strEncode[i] == '1' ? thickLength : narrowLength;

objGraphics.FillRectangle(i % 2 == 0 ? Brushes.Black : Brushes.White,

leftMargin, topMargin, intBarWidth, barCodeHeight);

leftMargin += intBarWidth;

}

//绘制 明码

SizeF sizeF = objGraphics.MeasureString(sourceCode, font);

float x=(objBitmap.Width - sizeF.Width) / 2;

float y = objBitmap.Height - sizeF.Height;

objGraphics.FillRectangle(Brushes.White, x, y, sizeF.Width, sizeF.Height);

objGraphics.DrawString(sourceCode, font, Brushes.Black, x, y);

return objBitmap;

}

新建一个Winform程序拖一个PictureBox控件,然后把方法返回的图片绑到PictureBox上,就可以看到结果了。

以上代码需要引用 System.Drawing 命名空间。

顺带提一句,还有一种最简单的办法就是下载条形码字体,然后输出的时候设定字体为条形码字体,显示的就是条形码了。不过你不能要求每个客户机都装这种字体。这个是个明显的缺陷,所以不推荐使用这种方法。

【BarCode条形码基于C# GDI+ 的实现方法详解】相关文章:

基于C#委托的深入分析

深入委托与多播委托的详解

string类的使用方法详解

C# 4.0 大数的运算--BigInteger的应用详解

关于C#生成MongoDB中ObjectId的实现方法

C#仿密保卡功能的简单实现代码

C# dynamic关键字的使用方法

C#计算代码执行时间的方法

使用Deflate算法对文件进行压缩与解压缩的方法详解

c#之利用API函数实现动画窗体的方法详解

精品推荐
分类导航