1
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;
        }
    }

我正在使用上面的代码使用 Free 3 of 9 生成条形码。但如果我看到小于 40 的尺寸,我的条形码阅读器无法读取该代码。40 码对我的应用来说太大了,有什么办法可以减小条码的大小吗?

Font threeOfNine = new Font("Free 3 of 9", 30,
                            System.Drawing.FontStyle.Regular,
                            System.Drawing.GraphicsUnit.Point);
4

1 回答 1

1

要正确扫描条码,必须满足以下两个条件之一:

  • 每个条码特征的宽度(以设备像素为单位)必须很大

  • 每个条码特征的宽度(以设备像素为单位)必须是精确整数

如果渲染一个基本特征宽度为 1/72" 的代码 39 条码并尝试在 101.6dpi 设备上打印它,一些应该是 1/72" 宽的特征将打印为 1 个像素宽,而另一些则打印为 2 个像素宽像素。应该是 2/72" 的特征通常会打印为三个像素宽,但有时会打印为两个像素。看到两个像素宽的扫描仪将无法知道它是否是一个比平时更窄的宽特征,或打印得比平时更宽的狭窄特征。

如果条码尺寸被缩小以匹配输出设备的分辨率,那么在扫描仪看来,2 像素宽的东西将是 1 像素宽的东西的两倍。即使条形码会更小,它们也更有可能被阅读。或者,如果输出设备分辨率增加(例如到 300dpi),那么单宽特征将是 4-5 像素,而双宽特征将是 8-9 像素。即使打印为 5 像素宽的窄特征后面跟着打印为 8 的宽特征(尺寸比略低于“正确的”2:1),扫描仪也应该可以轻松读取它。

请注意,虽然某些格式仅使用两种宽度的条和空格,但其他格式(如 Code 128)使用更多。可靠的扫描要求能够区分单宽、双宽、三宽和四宽特征。如果单宽度特征的宽度在 3 到 4 像素之间(因此它们有时显示为 3,有时显示为 4),扫描仪可能难以确定打印为 12 像素宽的特征是否是打印宽度大于 3 像素的三宽度特征。名义上的,或更窄的四边形特征。大多数扫描仪可能会做出必要的推断来弄清楚它,但是对于单宽、双宽、三重和四宽特征具有一致的宽度将大大提高可读性。

于 2013-12-05T19:18:35.537 回答