首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何使用免费的3/9制作微型条形码

如何使用免费的3/9制作微型条形码
EN

Stack Overflow用户
提问于 2012-12-19 03:44:17
回答 1查看 1.5K关注 0票数 1
代码语言:javascript
复制
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的尺寸对我的应用程序来说太大了,有什么方法可以减小条形码的尺寸吗?

代码语言:javascript
复制
Font threeOfNine = new Font("Free 3 of 9", 30,
                            System.Drawing.FontStyle.Regular,
                            System.Drawing.GraphicsUnit.Point);
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 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像素宽的特征是比标称宽度宽的三倍宽特征,还是较窄的四倍宽特征。大多数扫描仪可能会做出必要的推断来找出它,但是对于单宽度、双宽度、三宽度和四宽度特征具有一致的宽度将大大提高可读性。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/13940325

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档