public class Barcode
{
public Bitmap CreateBarcode(string data)
{
string barcodeData = "*" + data + "*";
Bitmap barcode = new Bitmap(1, 1);
// less than size 40, my barcode reader can not read it.
Font threeOfNine = new Font("Free 3 of 9", 40,
System.Drawing.FontStyle.Regular,
System.Drawing.GraphicsUnit.Point);
Font arial = new Font("Arial", 15,
System.Drawing.FontStyle.Regular,
System.Drawing.GraphicsUnit.Point);
Graphics graphics = Graphics.FromImage(barcode);
SizeF dataSize = graphics.MeasureString(barcodeData, threeOfNine);
dataSize.Height = 70;
barcode = new Bitmap(barcode, dataSize.ToSize());
graphics = Graphics.FromImage(barcode);
graphics.Clear(Color.White);
graphics.TextRenderingHint = TextRenderingHint.SingleBitPerPixel;
graphics.DrawString(barcodeData, threeOfNine, new SolidBrush(Color.Black), 0, 0);
graphics.DrawString(data, arial, new SolidBrush(Color.Black), 50, 40);
graphics.Flush();
threeOfNine.Dispose();
graphics.Dispose();
return barcode;
}
}我正在使用上面的代码来生成条形码,使用9个中的3个。但是如果我看到尺寸小于40,我的条形码阅读器无法读取该代码。40的尺寸对我的应用程序来说太大了,有什么方法可以减小条形码的尺寸吗?
Font threeOfNine = new Font("Free 3 of 9", 30,
System.Drawing.FontStyle.Regular,
System.Drawing.GraphicsUnit.Point);发布于 2013-12-06 03:18:36
要正确扫描条形码,必须满足以下两个条件之一:
如果呈现基本特征宽度为1/72“的代码39条形码,并尝试将其打印在101.6dpi设备上,则某些应为1/72”宽的特征将打印为一个像素宽度,而另一些特征将打印为两个像素。应该是2/72“的特征通常打印为三个像素宽,但有时打印为两个像素。扫描仪如果看到两个像素宽的东西,就无法知道是宽特征打印得比平时窄,还是窄特征打印得比平时宽。
如果缩小条形码大小以匹配输出设备的分辨率,那么两个像素宽的东西在扫描仪上会比一个像素宽的东西大两倍。尽管条形码会更小,但它们更有可能是可读的。或者,如果输出设备分辨率增加(例如增加到300dpi),则单宽度特征将是4-5像素,而双宽度特征将是8-9像素。即使打印为5像素宽的窄特征之后是打印为8的宽特征(尺寸比略低于2:1),扫描仪也不会有读取它的问题。
请注意,虽然一些格式只使用两个宽度的条形和空格,但其他格式,如代码128,使用更多。可靠的扫描要求能够区分单宽度、双宽度、三宽度和四宽度特征。如果单宽度特征的宽度在3到4像素之间(因此,它们有时显示为3,有时显示为4),扫描仪可能难以确定打印为12像素宽的特征是比标称宽度宽的三倍宽特征,还是较窄的四倍宽特征。大多数扫描仪可能会做出必要的推断来找出它,但是对于单宽度、双宽度、三宽度和四宽度特征具有一致的宽度将大大提高可读性。
https://stackoverflow.com/questions/13940325
复制相似问题