このトピックでは、Infragistics Barcode Reader ライブラリを紹介し、C# と VB で作業をする方法を説明します。プロパティ、クラス、メソッドだけでなく、Symbology 列挙体のオプションの使用も説明します。最後に、完全なコード サンプルが個別のセクションに提供されます。このトピックの内容は次のようにセクションで構成されます。
サポートされる記号のリスト。
手順ごとの説明。
プロパティ、クラス、メソッド、列挙体。
新しい Barcode Reader オブジェクトのインスタンスを作成してプロパティを構成します。
Infragistics Barcode Reader は画像からバーコードをデコードするためのライブラリです。
以下の手順で画像デコード機能つまり、バーコード用の画像をスキャンする機能を実装します。
必要なアセンブリを追加します。
以下の NuGet パッケージをアプリケーションに追加します。NuGet フィードのセットアップと NuGet パッケージの追加の詳細については、NuGet フィード ドキュメントを参照してください。
Infragistics.WPF.BarcodeReader
必要な名前空間を追加します。
コード ビハインドに using/Imports を配置します。
Visual Basic の場合:
Imports Infragistics.Controls.Barcodes
+ C# の場合:
using Infragistics.Controls.Barcodes;
新しい 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);
デコードされたデータを処理します。
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;
}
}
Barcode Reader ライブラリには、以下のプロパティがあります。
MaxNumberOfSymbolsToRead - 画像で予想されるバーコードの最大数 (すべては -1、デフォルト: 1、推奨: 1÷5)
しきい値に達すると、Barcode Reader はデコードを中止します。認識するバーコードの数が少ないとアプリケーションのパフォーマンスが向上します。-1 が割り当てられると、Barcode Reader はそれらすべてが見つかるまで記号を取得します。
以下の画像は、MaxNumberOfSymbolsToRead を 1 に設定して、スキャニングされた画像 (FilteredImage プロパティによって取得) を示します。認識される記号はひとつだけです (その上に緑の矩形が付いている記号 Code 128)。
図 2: 取得したバーコードでの MaxNumberOfSymbolsToRead 設定の効果
MinSymbolSize - 認識可能な記号の最小サイズ (ピクセル単位) (リニア バーコードのみの幅と高さ) - (デフォルト: -1、推奨: 画像サイズに釣り合う値。たとえば、高さ 500px の画像では 50)。
デフォルト値が -1 であると、認識可能な記号の最小サイズは、スキャンされた画像サイズに比例して内部で計算されることになります。MinSymbolSize 値が小さいと、画像はより多くのゾーンに分割されます (これにより、小さい記号の認識が可能になりますが、パフォーマンスに対してマイナスの効果が生じます)。値が大きくなると反対になるだけです (ゾーンの数が減るため記号は大きくなり、パフォーマンスは向上します)。記号のサイズ (ピクセル単位) が MinSymbolSize の指定よりも小さくなると、画像はデコードされなくなります。 * BarcodeOrientation - スキャンされたバーコードの方向 (リニア バーコードのみ)
有効な値:
Horizontal
Vertical
Unspecified (デフォルト)
方向が Unspecified の場合、バーコードは方向に関係なくデコードされることになります。
FilteredImage - 認識されたバーコード記号を持つ画像。 (図 3: フィルターされたバーコード画像) Decode メソッドのみと併用される。
図 3: フィルターされたバーコード画像
以下のコード サンプルでは、バーコード リーダーのプロパティを次のように構成します。
読み込む記号の最大数: 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 メソッドによって、画像をスレッドセーフでデコードできます。つまり、いくつかの画像を異なるスレッドで同時にデコードできます。
Visual Basic の場合:
Deployment.Current.Dispatcher.BeginInvoke(
Function()
barcodeReader.DecodeAsync(inputImage)
End Function)
C# の場合:
Deployment.Current.Dispatcher.BeginInvoke(() =>
{
barcodeReader.DecodeAsync(aBitmapSourceObject);
});
DecodeComplete イベントで、 ReaderDecodeArgs クラスはパラメーターとして渡されます。クラスには、以下の情報が含まれます。
FilteredImage - 認識されたバーコード記号を持つ画像
SymbolFound - バーコードが見つかったかどうかを示すブール引数
Symbology - デコードされたバーコード記号の記号
Value - バーコード記号のエンコードされた文字列情報
Barcode Reader が検索するタイプは、 記号列挙体を使用してオプションで指定できます。
未指定 - 記号が指定されていないため、すべてを検索します
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;
}
}
関連トピック