バージョン

Infragistics Barcode Reader

このトピックでは、Infragistics Barcode Reader ライブラリを紹介し、C# と VB で作業をする方法を説明します。プロパティ、クラス、メソッドだけでなく、Symbology 列挙体のオプションの使用も説明します。最後に、完全なコード サンプルが個別のセクションに提供されます。このトピックの内容は次のようにセクションで構成されます。

サポートされる記号のリスト。

手順ごとの説明。

プロパティ、クラス、メソッド、列挙体。

新しい Barcode Reader オブジェクトのインスタンスを作成してプロパティを構成します。

概要

Infragistics Barcode Reader は画像からバーコードをデコードするためのライブラリです。

サポートされる記号

Infragistics Barcode Reader は以下のバーコード記号をサポートします。

Infragistics Barcode Reader 01.png

図 1: バーコードを含む画像の例

画像デコード機能の実装

手順

以下の手順で画像デコード機能つまり、バーコード用の画像をスキャンする機能を実装します。

  1. 必要なアセンブリを追加します。

以下の NuGet パッケージをアプリケーションに追加します。NuGet フィードのセットアップと NuGet パッケージの追加の詳細については、NuGet フィード ドキュメントを参照してください。

  • Infragistics.WPF.BarcodeReader

  1. 必要な名前空間を追加します。

コード ビハインドに using/Imports を配置します。

Visual Basic の場合:

Imports Infragistics.Controls.Barcodes

+ C# の場合:

using Infragistics.Controls.Barcodes;
  1. 新しい Barcode Reader インスタンスを作成し、イベント ハンドラーを添付して、デコード プロセスを開始します。

コード ビハインドで Barcode Reader の新しいインスタンスを追加します。Barcode Reader がバーコードをデコードする、または画像のスキャニングを終了すると、バーコード記号が画像で認識される回数だけ DecodeComplete イベントが発生します。DecodeComplete イベントのイベント ハンドラーを添付して、次に Decode メソッドまたは DecodeAsync (スレッドセーフ) メソッドを使用して、デコード プロセスを開始します。

Visual Basic の場合:

Dim barcodeReader As New BarcodeReader()
AddHandler barcodeReader.DecodeComplete, New EventHandler(Of ReaderDecodeArgs)(AddressOf BarcodeReader_DecodeComplete)
barcodeReader.Decode(aBitmapSourceObject)

C# の場合:

BarcodeReader barcodeReader = new BarcodeReader();
barcodeReader.DecodeComplete += new EventHandler<ReaderDecodeArgs>(BarcodeReader_DecodeComplete);
barcodeReader.Decode(aBitmapSourceObject);
  1. デコードされたデータを処理します。

DecodeComplete イベント ハンドラーでデコードされたデータを処理します。Barcode Reader が画像のスキャニングを終了した後で、指定された画像で検出されたバーコード記号ごとに DecodeComplete イベントが発生することに注意してください。

Visual Basic の場合:

Private Sub BarcodeReader_DecodeComplete(sender As Object, e As ReaderDecodeArgs)
    If e.SymbolFound Then
        Dim result As String = e.Symbology & " " & e.Value
    End If
End Sub

C# の場合:

private void BarcodeReader_DecodeComplete(object sender, ReaderDecodeArgs e)
{
    if (e.SymbolFound)
    {
        string result = e.Symbology + " " + e.Value;
    }
}

Infragistics Barcode Reader の使用

バーコード リーダーのプロパティ

バーコード リーダーのプロパティの説明

Barcode Reader ライブラリには、以下のプロパティがあります。

  • MaxNumberOfSymbolsToRead - 画像で予想されるバーコードの最大数 (すべては -1、デフォルト: 1、推奨: 1÷5)

しきい値に達すると、Barcode Reader はデコードを中止します。認識するバーコードの数が少ないとアプリケーションのパフォーマンスが向上します。-1 が割り当てられると、Barcode Reader はそれらすべてが見つかるまで記号を取得します。

Note
注:

スキャニングが完了した後、デコードされたバーコード記号ごとに DecodeComplete イベントが発生します。

以下の画像は、MaxNumberOfSymbolsToRead を 1 に設定して、スキャニングされた画像 (FilteredImage プロパティによって取得) を示します。認識される記号はひとつだけです (その上に緑の矩形が付いている記号 Code 128)。

Infragistics Barcode Reader 02.png

図 2: 取得したバーコードでの MaxNumberOfSymbolsToRead 設定の効果

  • MinSymbolSize - 認識可能な記号の最小サイズ (ピクセル単位) (リニア バーコードのみの幅と高さ) - (デフォルト: -1、推奨: 画像サイズに釣り合う値。たとえば、高さ 500px の画像では 50)。

デフォルト値が -1 であると、認識可能な記号の最小サイズは、スキャンされた画像サイズに比例して内部で計算されることになります。MinSymbolSize 値が小さいと、画像はより多くのゾーンに分割されます (これにより、小さい記号の認識が可能になりますが、パフォーマンスに対してマイナスの効果が生じます)。値が大きくなると反対になるだけです (ゾーンの数が減るため記号は大きくなり、パフォーマンスは向上します)。記号のサイズ (ピクセル単位) が MinSymbolSize の指定よりも小さくなると、画像はデコードされなくなります。 * BarcodeOrientation - スキャンされたバーコードの方向 (リニア バーコードのみ)

  • Horizontal

  • Vertical

  • Unspecified (デフォルト)

方向が Unspecified の場合、バーコードは方向に関係なくデコードされることになります。

  • FilteredImage - 認識されたバーコード記号を持つ画像。 (図 3: フィルターされたバーコード画像) Decode メソッドのみと併用される。

Infragistics Barcode Reader 03.png

図 3: フィルターされたバーコード画像

Note

注: プロパティの値に対する制限が多くなるほど、Barcode Reader のパフォーマンスは向上します。

バーコード リーダーのプロパティの設定例

以下のコード サンプルでは、バーコード リーダーのプロパティを次のように構成します。

  • 読み込む記号の最大数: 3

  • 記号の最小サイズ: 20 ピクセル

  • 水平方向

Visual Basic の場合:

Dim barcodeReader As New BarcodeReader()
barcodeReader.MaxNumberOfSymbolsToRead = 3
barcodeReader.MinSymbolSize = 20
barcodeReader.BarcodeOrientation = SymbolOrientation.Horizontal

C# の場合:

BarcodeReader barcodeReader = new BarcodeReader();
barcodeReader.MaxNumberOfSymbolsToRead = 3;
barcodeReader.MinSymbolSize = 20;
barcodeReader.BarcodeOrientation = SymbolOrientation.Horizontal;

マルチスレッド画像のデコード (メソッド DecodeAsync)

DecodeAsync メソッドによって、画像をスレッドセーフでデコードできます。つまり、いくつかの画像を異なるスレッドで同時にデコードできます。

Visual Basic の場合:

Deployment.Current.Dispatcher.BeginInvoke(
    Function()
        barcodeReader.DecodeAsync(inputImage)
    End Function)

C# の場合:

Deployment.Current.Dispatcher.BeginInvoke(() =>
{
    barcodeReader.DecodeAsync(aBitmapSourceObject);
});

DecodeComplete 引数 (クラス ReaderDecodeArgs)

DecodeComplete イベントで、 ReaderDecodeArgs クラスはパラメーターとして渡されます。クラスには、以下の情報が含まれます。

  • FilteredImage - 認識されたバーコード記号を持つ画像

  • SymbolFound - バーコードが見つかったかどうかを示すブール引数

  • Symbology - デコードされたバーコード記号の記号

  • Value - バーコード記号のエンコードされた文字列情報

記号タイプに列挙体を使用

Barcode Reader が検索するタイプは、 記号列挙体を使用してオプションで指定できます。

Note

: 記号列挙体には Flags 属性があり、値を組み合わせることができます。列挙体には、すでに組み合わせたフラグ、Linear と All が含まれています。

  • 未指定 - 記号が指定されていないため、すべてを検索します

  • Code39

  • Code39Ext - Code 39 Extended。

  • Code128

  • Ean13

  • Ean8

  • UpcA

  • UpcE

  • EanUpc - UPC-A、UPC-E、EAN-8、EAN-13 記号論のファミリ。

  • Interleaved2Of5

  • QRCode

  • Linear (Code39Ext | Code128 | EanUpc | Interleaved2Of5) - すべてのサポートされるリニア記号。

  • All (Linear | QRCode) - すべてのサポートされる記号。

以下の例は、Code39 および Code128 の列挙体を指定します。

Visual Basic の場合:

Dim symbologyTypes As Symbology = Symbology.Code39 Or Symbology.Code128
barcodeReader.Decode(aBitmapSourceObject, symbologyTypes)

C# の場合:

Symbology symbologyTypes = Symbology.Code39 | Symbology.Code128;
barcodeReader.Decode(aBitmapSourceObject, symbologyTypes);

コード サンプル

以下は例で使用される完全なコードです。サンプルは、新しい Barcode Reader オブジェクトのインスタンスを作成してプロパティを構成する方法を示します。サンプルの Barcode Reader は最高 3 つの Code 39 記号 Code 128 記号を最小サイズ 200 ピクセルで水平方向でスキャンします。

Visual Basic の場合:

Private Sub ButtonDecode_Click(sender As Object, e As RoutedEventArgs)
    Dim barcodeReader As New BarcodeReader()
    barcodeReader.MaxNumberOfSymbolsToRead = 3
    barcodeReader.MinSymbolSize = 200
    barcodeReader.BarcodeOrientation = SymbolOrientation.Horizontal
    AddHandler barcodeReader.DecodeComplete, New EventHandler(Of ReaderDecodeArgs)(AddressOf BarcodeReader_DecodeComplete)
    Dim symbologyTypes As Symbology = Symbology.Code39 Or Symbology.Code128
    barcodeReader.Decode(aBitmapSourceObject, symbologyTypes)
End Sub
Private Sub BarcodeReader_DecodeComplete(sender As Object, e As ReaderDecodeArgs)
    If e.SymbolFound Then
        Dim result As String = e.Symbology & “ “ & e.Value
    End If
End Sub

C# の場合:

void ButtonDecode_Click(object sender, RoutedEventArgs e)
{
    BarcodeReader barcodeReader = new BarcodeReader();
    barcodeReader.MaxNumberOfSymbolsToRead = 3;
    barcodeReader.MinSymbolSize = 200;
    barcodeReader.BarcodeOrientation = SymbolOrientation.Horizontal;
    barcodeReader.DecodeComplete += new        EventHandler<ReaderDecodeArgs>(BarcodeReader_DecodeComplete);
    Symbology symbologyTypes = Symbology.Code39 | Symbology.Code128;
    barcodeReader.Decode(aBitmapSourceObject, symbologyTypes);
}
void BarcodeReader_DecodeComplete(object sender, ReaderDecodeArgs e)
{
    if(e.SymbolFound)
    {
        string result = e.Symbology + “ “ + e.Value;
    }
}

関連トピック