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

バーコードを正しくスキャンするには、次の2つの条件のいずれかを適用する必要があります。

  • すべてのバーコード機能の幅(デバイスピクセル単位)は大きくする必要があります

  • すべてのバーコード機能の幅(デバイスピクセル単位)は、正確な整数である必要があります

基本フィーチャ幅が1/72"のcode39バーコードをレンダリングし、それを101.6dpiデバイスで印刷しようとすると、1/72"幅であると想定される一部のフィーチャは1ピクセル幅として印刷され、その他は2ピクセル幅として印刷されます。ピクセル。2/72 "と想定されるフィーチャは、ほとんどの場合3ピクセル幅で印刷されますが、2ピクセルで印刷されることもあります。2ピクセル幅の何かを見るスキャナーは、それが通常よりも狭く印刷されたワイドフィーチャであるかどうかを判断できません。または、通常よりも広く印刷された狭いフィーチャ。

バーコードサイズが出力デバイスの解像度に一致するように縮小された場合、2ピクセル幅のものは、1ピクセル幅のものの2倍の大きさでスキャナーに表示されます。バーコードは小さくなりますが、読み取り可能になる可能性がはるかに高くなります。または、出力デバイスの解像度を上げると(たとえば、300dpiに)、シングル幅の機能は4〜5ピクセルになり、ダブル幅の機能は8〜9ピクセルになります。幅5ピクセルで印刷された狭いフィーチャの後に、8で印刷された広いフィーチャ(「正しい」2:1よりやや低いサイズ比)が続いたとしても、スキャナーは問題なく読み取ることができます。

一部のフォーマットは2つの幅のバーとスペースしか使用しませんが、Code128のような他のフォーマットはそれ以上を使用することに注意してください。信頼性の高いスキャンには、シングル、ダブル、トリプル、およびクワッド幅の機能を区別できる必要があります。シングル幅のフィーチャの幅が3〜4ピクセルの場合(3〜4ピクセルの場合もあります)、スキャナーは、12ピクセル幅で印刷されたフィーチャがトリプル幅のフィーチャであるかどうかを判断するのが難しい場合があります。公称値、またはより狭いクワッド幅のフィーチャ。ほとんどのスキャナーは、おそらくそれを理解するために必要な推論を行うことができますが、シングル、ダブル、トリプル、およびクワッド幅の機能に一貫した幅を持たせると、読みやすさが大幅に向上します。

于 2013-12-05T19:18:35.537 に答える