web-dev-qa-db-ja.com

C#:コード128バーコードの生成(バー/スペースの幅)

だから私はこのコードを継承しました、あるいは誰かがこれを開発して先に進みました、そして今私たちはそれで問題を抱えています、そして私はそれを調べています...

私たちはc128バーコードを生成しており、それらを認証してもらうと、私には理解できない問題に気づきました。バー/スペースの幅は10.5ミルで、許容範囲は15〜21ミル(1ミル= .001インチ)です。

レンダリングコードはこのライブラリに基づいています: http://www.codeproject.com/KB/GDI-plus/GenCode128.aspx しかし、いくつか変更されています...

生成されるバーコードはすべて英数字であり、特殊文字はありません。バーとスペースの幅は、エンコードされる文字に依存すると思いました。

使用されている設定は次のとおりです。

settings.Font = new Font ( FontFamily.GenericSansSerif, 12 );
settings.TopMargin = 10
settings.BottomMargin = 10
settings.LeftMargin = 10
settings.RightMargin = 10
settings.BarCodeHeight = 80
settings.DrawText = true
settings.BarCodeToTextGapHeight = 10
settings.InterCharacterGap = 2

推測すると、バーコードの高さがテキストとバーコードの長さに基づいているのではなく、バーの幅がバーコードの高さに基づいているためだと思います。しかし、私は(レビューした後でも)仕様にあまり精通しておらず、せいぜい初心者のC#プログラマーです...

9
Brad

これは直接的な答えではありませんが、バーコードの生成には十分にテストされたライブラリを使用することを強くお勧めします...いくつかの落とし穴があるため、バーコードを正しく取得するのは簡単ではありません...いくつかの商用ライブラリがあります。いくつか無料...

.NET用の2つの無料バーコードライブラリ:
http://barcoderender.codeplex.com/
http://www.codeproject.com/KB/graphics/BarcodeLibrary.aspx

15
Yahia

FWIW、これは非常に貧弱なバーコード生成ルーチンであり、それを放棄して、これらのバーコードを生成するために特別に作成されたライブラリを検索する必要があります。

ビットマップの作成に使用されるデバイスコンテキストの解像度はどれくらいですか?

見た目からすると、コードはデフォルトで画面デバイスコンテキスト(96dpi)を使用しています。

バーコードは最低300dpi、できれば600dpi、理想的には2540dpiで生成する必要があります。

96dpiでは、与えられた精度に必要な解像度を達成することはできません。

解決策1:高解像度のプリンターデバイスコンテキストを使用するようにコードを変更し、その解像度でビットマップを作成します。現在、コードは任意に計算された幅を使用しています。

次の問題は、コードが整数のバー幅を使用し、floatにキャストすることです(そうです!)。これは、低dpi(高dpiでもそれほどではない)を処理するときに問題になります。一部のバー/スペースは2ピクセルを使用し、一部は3ピクセルを使用する場合があるため、バーコードに段違い平行棒/スペースが含まれることになります。

解決策2:同じ幅であると想定されるすべてのバー/スペースが同じ幅であることを確認します。

HTH

7
TheBarcodeMan

Yahiaが提案しているように、無料のバーコードライブラリを使用したくない場合は、:settings.InterCharacterGapの値を増やすとうまくいくと思います。

ただし、これらのライブラリを確認する必要があると思います。これにより、保守するコードが少なくなり、ソフトウェアをより簡単に適応できるようになります。必要なバーコードのタイプを変更した場合は、車輪の再発明を行う代わりに、すぐにサポートできる可能性があります。

2
Martin